COS 426:
Computer Graphics
Spring 2018

General | Syllabus | Coursework


This course has the following programming assignments:

These will be linked as the assignments go online.


There will be 2 exams. They will be closed-book. However, you may bring a 8.5x11" cheat-sheet with writing on both sides, if you wish. Examples of previous exams can be found here.

Programming Resources

Assignments will be implemented in javascript. Any computer and browser may be used for development though we expect to test your programs on Chrome running on MacOS.

We will add further programming resources here throughout the course.

Submitting Assignments

We will use Dropbox for submissions of work for this class. Look for the submission link in the description of each assignment - login with your Princeton netID, and submit all applicable files by the deadline. You can resubmit and unsubmit files as needed up until the submission deadline. There is more information about dropbox here.

Please pack the entire assignment, including all code, writeup, input images, output images, overlay images, etc. into one .zip file called "" (where N is the assignment number -- e.g., with the internal directory structure specified in the assignment instructions. Please submit all images in .jpg format to save space.

Late Policy

Assignments are due at 11:55PM on the due date, as determined by the file date of the file upload. Late assignments are marked down 1/4 of the full grade per day. Five minutes late is the same as one day late. Each student can use up to a total of three "free late days" during the semester. Exceptions beyond these free days are rare -- they will be granted only for medical reasons, and only by the professor.

Collaboration Policy

The COS 426 assignment collaboration policy is derived from that of Princeton's COS 217 ...

Concerning receiving help from others...

Programming is an individual creative process much like composition. You must reach your own understanding of the problem and discover a path to its solution. During this time, discussions with other people are permitted and encouraged. However, when the time comes to write code that solves the problem, such discussions (except with course staff members) are no longer appropriate: the code must be your own work. If you have a question about how to use some feature of C, Unix, etc., you certainly can ask your friends or the teaching assistants, but specific questions about code you have written must be treated more carefully.

For each assignment you must specifically state, in your writeup file, the names of any individuals from whom you received help, and the nature of the help that you received. That includes help from friends, classmates, lab TAs, course staff members, etc.

Do not, under any circumstances, copy another person's code. Incorporating someone else's code into your code in any form is a violation of academic regulations. This includes adapting solutions or partial solutions to assignments from any offering of this course or any other course. There is one exception to the code-sharing rule: You may adapt code from the COS 426 course materials provided that you explain what code you use, and cite its source in your writeup file.

Copying and transforming someone else's code (by rearranging independent code, renaming variables, rewording comments, etc.) is plagiarism. Some inexperienced programmers have the misconception that detecting such plagiarism is difficult. Actually, detecting such plagiarism is quite easy. Not only does such plagiarism quickly identify itself during the grading process, but also we can (and do) use software packages, such as Alex Aiken's renowned MOSS software, for automated help.

If we suspect a student of plagiarism on an assignment, then we will refer the case to the Committee on Discipline. If the Committee on Discipline finds the student guilty of plagiarism, then the standard penalty is automatic failure of the COS 426 course. The Committee on Discipline may impose additional penalties.

Concerning providing help to others...

For each assignment you must specifically state, in your writeup file, the names of any individuals to whom you provided help, and the nature of the help that you provided.

Abetting plagiarism or unauthorized collaboration by "sharing" your code is prohibited. Sharing code in digital form is an especially egregious violation. Do not e-mail your code or make your code available to anyone. Do not share your code with anyone even after the due date/time of the assignment.

You are responsible for keeping your solutions to the COS 426 programming assignments away from prying eyes. If someone else copies your code, we have no way to determine who is the owner and who is the copier; the Committee on Discipline decides. If you are working on a public cluster computer, make sure that you do not leave the computer unattended, and that you delete your local files and logout before leaving.

You should store all of your assignment files in a private directory. You can create a private directory using commands similar to these:

$ mkdir cos426
$ chmod 700 cos426

Concerning electronic communication...

If you have a question or comment that will be helpful to other students, and you need not reveal any parts of your work to express the question or comment properly, then you should post it to the course's Piazza page. One of the course's instructors will reply as soon as possible. We welcome replies from other students, and may "endorse" a student's response instead of composing an instructor's response.

If you have a question or comment that will not be helpful to other students, or if you must reveal parts of your work to express your question or comment adequately, then you should post it privately to the appropriate preceptor on Piazza.

Final note

Please do not publish solutions to programming assignments in a way that could compromise their utility as pedagogical tools. For example, do not make them available on a publicly accessible web page. At Princeton, this is a violation of the basic rights, rules and responsibilities of members of the university community.