\documentclass[12pt]{article}
\usepackage{fullpage}

\newcommand{\unix}{\(\mbox{Unix}^{\!\!\textsc{\small tm}}\)}

\begin{document}

\title{Computer Science 333 \\
Computer Graphics}

\author{Dr. Stephen Bloch \\
office 112 Alumn\ae\ Hall \\
phone 877-4483 \\
email \texttt{sbloch@adelphi.edu} \\
Web page \texttt{http://www.adelphi.edu/sbloch/} \\
Class Web page \texttt{http://www.adelphi.edu/sbloch/class/333/} \\
office hours TBA}

\maketitle

\section{Subject Matter}
Twenty years ago, graphics was a specialty field within computer
science, of interest only to developers of video games (at the low end)
and powerful CAD/CAM packages (at the high end).  But with the release
of the Apple Macintosh and then Microsoft Windows, graphical user
interfaces became common for computers at all levels.  And the
widespread availability of microcomputers and workstations with
sufficient processing power has brought formerly high-end drafting,
painting, simulation, and animation capabiilities within the reach of
home and small-business users.  The field of computer graphics has
become mainstream, and an essential part of the training of a computer
scientist.

In past years this courses has concentrated on the mathematical
transformations necessary for computer graphics, particularly 3-D
rendering: scan conversion, rotation, translation, perspective projection, 
specular and diffuse reflection off a surface, refraction, transparency,
ray tracing, edge smoothing, \emph{etc.}
However, very few people today actually write code to do all that~---
most people buy a commercial graphics package and simply call it~---
so while that was an interesting collection of topics, I'm putting a
higher priority this year on programming graphical user interfaces.
Students are
still expected to be comfortable with geometric concepts, and to have
completed a course in linear algebra and matrices.

The techniques we discuss this semester can be carried out in almost any
programming language (although some of them are easier in an
object-oriented language, or a language that allows the passing of
functions as parameters to other functions).  But in the interest of
consistency and standardization, I plan to work in Java.  Its syntax is
similar to that of C and C++, its object model is similar to (though
simpler than) that of C++, and it has a standardized API for both
low-level graphics (lines, circles, etc.) and predefined graphical user
interface components (buttons, menus, etc.)

\section{How to Learn Graphics}
This is not a theoretical course; it is a very practical, hands-on
course.
To learn the stuff I expect you to learn, you \emph{must} spend a lot of
time on the computer \emph{trying things}.  Every time you read about a
new API feature, or hear me describe one in lecture, \emph{try it} in
a program.
\emph{Invent} new ways to use it, beyond what I or the textbook have
described.  \emph{Play} with it.
Although I'll assign at least half a dozen specific graphics programs to
write and turn in, I expect you to have written, debugged, run many more
than that by the end of the semester, since that's the only way to check
how much you \emph{really} understand.

\section{Texts}
We'll use the textbook \emph{Developing User Interfaces}, by Dan R.
Olsen, Jr.  for reading and homework assignments.  I hope to get
through most of the text this semester, an average of $15--20$
pages per class meeting, but I'll be happy to spend more time on a
particularly interesting or difficult topic.
\textbf{You are responsible for everything
in the reading assignments, whether or not I discuss it in a lecture.}

\section{Grading}
As I write this (a week before classes start), I envision six or seven
homework assignments and a final exam, each worth an equal share of the
semester grade.
The first few homework assignments will be very specific, while later
ones will be a project of your choice and successive enhancements of it.
Start thinking about projects you'd like to do, and discuss them with me.

% These numeric grades will be converted to letter grades as follows:
% I'll draw a curve showing the distribution of numeric grades, and look
% for naturally-occurring ``clumps''.  For each clump, especially the
% top and bottom ones, I'll examine some exam and
% homework papers to decide what letter grade seems appropriate.  This
% method corrects for excessively hard or excessively easy assignments
% while not penalizing anybody for having genius classmates.

The exam must be taken at the scheduled time, unless arranged in advance
or prevented by a documented medical or family emergency.  If you have
three or more exams scheduled on the same date, or
a religious holiday that conflicts with an exam or assignment due date,
please notify me in writing within the first two
weeks of the semester in order to receive due consideration.
% (and I'd
% prefer it if you let me know earlier --- you should know within the
% first week of class when all your exams are).
Exams not taken without one of
the above excuses will get a grade of 0.

Homework and programming
assignments will be accepted late, with a penalty of $30\%$ per 24 hours
or portion thereof after they're due.  An hour late is $30\%$ off, 25
hours late is $60\%$ off, and after 48 hours the best you can hope for is
a $10\%$.
It's still a good idea to do as much of it as you can, however,
because I'll assume on the exam that you've done the homework.

Programs are not abstract works of art,
they are supposed to run and solve real problems.  So if I get a program
that doesn't compile or run, or a program that has little or nothing to do
with the problem I assigned, I will give it a zero, no matter how much
time you put into it.  Don't bother turning in a program you haven't
tested yourself.

\section{Ethics}
Most homework assignments in this course involve writing, testing, and
debugging a program.  For most of these assignments, you are to work in
teams of two students (switching teams from one assignment to the next);
for other assignments, I may ask you to work individually.  

It's hard to define what constitutes ``cheating'' in this sort of
course.  Students are encouraged to help one another with mechanical and
linguistic difficulties (``how do I save this file?'', ``what's the syntax
for an inner class definition?'', \emph{etc.}), regardless of whether
they're on the same team, but designing, coding, testing, and debugging 
should be done by team members.  It's remarkably easy for a professor to
notice when three different teams have turned in nearly-identical
programs; if that happens, I'll grade it once and divide the credit
among the three, so the best any of them can hope for is $33\%$.

All work on the final exam must be entirely the work of the one
person whose name is at the top of the page.  If I have evidence that
one student copied from another on an exam, \emph{both} students will be
penalized; see above.


\section{Schedule}
This class meets every Tuesday and Thursday from 3:05 to 4:20 PM,
except on University holidays or if I cancel class.
All dates in the following schedule are tentative, except those fixed
by the University; if some topic listed here as taking one lecture in
fact takes two lectures to cover adequately, or {\em vice versa},
the schedule will shift.

Reading assignments are chapter numbers in the Olsen textbook, unless
stated otherwise.
I expect you to have read the specified chapters in the textbook
\emph{before} the lecture that deals with that topic; this way I can
concentrate my time on answering questions and clarifying subtle or
difficult points in the textbook, rather than on reading 
to you, which will bore both of us.  \textbf{Please read ahead!}

\pagebreak

\begin{tabbing}
{\bf Date(s)} \=
{\bf Assignment \hskip1.5em} \=
{\bf Reading \hskip4em} \=
{\bf Subject} \kill
{\bf Date(s)} \>
{\bf Assignment} \>
{\bf Reading} \>
{\hskip3em \bf Lecture Subject} \\
%
2 Sept \> HW1 \> \> Administrivia, accounts, passwords, 
\\* \> \> \> email, Web, Java, using the lab \\
7 Sept \> \> 1 \> What is a GUI?  Using Java \\ % 25 pp.
9 Sept \> HW1 due; HW2 \> 2 \> Functional models \\ % 26 pp.
13 Sept \> \> \> Deadline to add classes \\
14 Sept \> \> \> Functional models \\ 
16 Sept \> HW2 due; HW3 \> 3 \> Graphics coordinates \\ % 38 pp.
21 Sept \> \> \> Drawing shapes \\ 
23 Sept \> HW3 due; HW4 \> \> Drawing and measuring text \\ % 40 pp.
24 Sept \> \> \> Deadline to drop classes \\
28 Sept \> \> 4 \> Events and listeners \\
30 Sept \> HW4 due; HW5 \> \> Handling input devices \\ % 38 pp.
5 Oct \> \> \> Communication models \\
7 Oct \> \> 5 \> The Model-View-Controller architecture \\ % 28 pp.
12 Oct \> HW5 due; HW6 \> \> Implementing MVC in Java \\
14 Oct \> \> \> Implementing MVC in Java \\ % 20 pp.
19 Oct \> \> \> I'm at a conference; sub or no class \\ 
21 Oct \> \> 6 \> Predefined GUI components \\ %
26 Oct \> HW6 due; HW7 \> \> Predefined GUI components \\ % 34 pp.
28 Oct \> \> \> Catch up and review \\ %
2 Nov \> \> 7 \> Layouts and interface design \\ % 32 pp.
4 Nov \> HW7 due; HW8 \> \> Visual design \\ %
5 Nov \> \> \> Deadline to withdraw from classes \\
9 Nov \> \> 8 \> Text-like input syntax \\ % 20 pp.
11 Nov \> \> \> State diagrams \\ %
16 Nov \> HW8 due; HW9 \> \> More on complex input \\ % 30 pp.
18 Nov \> \> 9 \> Geometry of shapes \\ %
23 Nov \> \> \> Geometry of shapes \\ % 26 pp.
25 Nov \> \> \>	Thanksgiving break --- no classes \\
30 Nov \> HW9 due; HW10 \> \> Shapes and transformations \\ %
2 Dec \> \> 10 \> Shapes and transformations \\ %
7 Dec \> \> \> Catch up and review \\
9 Dec \> HW10 due \> \> Catch up and review for final exam \\
16 Dec \> \> \> 3:30 -- 5:30 PM, final exam \\
\end{tabbing}
\end{document}

% HW1: a Java applet that draws text in a couple of places
% HW2: describe a problem & work out a functional model
% HW3: a Java applet that draws some shapes
% HW4: a Java applet that uses text measurement (TextCanvas class)
% HW5: a Java applet that handles resize, mouse, & keyboard events
% HW6: a Java applet using MVC model and listeners
% HW7: a Java applet using standard GUI components (buttons, text
%      fields, labels, canvases...)
% HW8: more of the same; discuss visual design
% HW9: complex input w/state diagram (and text-parsing?)
% HW10: Shapes and transformations
