COMS W4167 Computer Animation

Fall 2020, Columbia University

TR 5:40pm-6:55PM

Instructor: Changxi Zheng

Important! You will be using Codio for doing and submitting your programminga assignments. In this way, every student will have the same programming environment to work with. We are also going to release start codes and solution executables on the Codio. More details will be announced on Courseworks.

Pre-requisites: Conformable on programming in C++, Data structures (tree, queue, etc.), Multivariable calculus (e.g., knowing the concepts of partial derivative, gradient, Jacobian), Linear algebra (vector, matrix)


Mandeep Bhutani (uni: mb4463)
Huy Ha (uni: hqh2101)
Ziwei Zhu (uni: zz2556)

Office Hours

(Tentative) Schedule

date topic reading assignments
8Sep Intorduction    
10Sep Kinematics    
15Sep Time integration: Symplectic Euler    
17Sep Forces    
22Sep Time integration: Implicit Euler    
24Sep Time integration: Implicit Euler    
29Sep Time integration: Implicit Euler    
1Oct Collision detection & response    
6Oct Electron clouds    
8Oct Continuous collision detection    
13Oct Broad phase collision detection    
15Oct Broad phase collision detection    
20Oct Broad phase collision detection    
22Oct Constrained mechanical systems    
27Oct Rigid body kinematics    
29Oct Rigid body kinematics    
3Nov -----------    
5Nov Rigid body collisions    
10Nov Elasticity    
12Nov Elasticity    
17Nov Animation Control    
19Nov Fluids: advection and total derivative    
24Nov Fluids: divergence free vector fields    
26Nov -----------    
1Dec Fluids: free surfaces    
3Dec Fluids: Other simulation methods    
8Dec Advanced topic I    
10Dec Advanced topic II    

Projects and Work Load

Throughout this semester, you will have weekly programming assignments organized in a series of themes (see below). Each theme will have one or more milestones that you need to reach in your assignment submissions. For each assignment, we will provide starter code in C++. All projects should be submitted electronically to Codio. More details about finishing your assignments on Codio will be provided by CAs.



There will be no midterm exam in this course. There will be a take-home exam.

Zoom etiquette

Mute yourself, unless you are presenting, or this is a discussion part of class and you are speaking. Please keep your camera on if your environment allows that, e.g. in terms of network bandwidth, and lack of visual background distractions. You are encouraged to use the public class chatroom for posting questions if you have, and to offer answers to questions by the instructor or by other students. This is usually preferable to asking a classmate such a question by direct messaging, because direct messaging would distract your fellow student, so please exercise judgement regarding this option. No question is bad, and you should take advantage of the online venue that promotes such Q&A. When I notice your question, I will likely repeat it and address it, or decide to take it off line if it redirects the flow of the lecture away from where I need it to go.

COVID-19 infections

We will have a few HyFlex sessions for which on-campus students will be invited to the classroom. If you have any COVID-19 symptoms, or have been in recent contact with a SARS-CoV-2 positive person, don’t come to class and get yourself quarantined. In such a case, please let us know, stay safe, and get well soon. If the instructor will have any COVID-19 symptoms, or be in contact with a SARS-CoV-2 positive person, or if there is a change for the worse in local infection rate or campus reopening guidelines, any HyFlex class may be canceled on a moment's notice.


There is no required textbook. In case you need to refresh your Calculus and Linear Algebra background, here are some reference books:

We don't expect you to know OpenGL; our starter code handles all the OpenGL rendering of objects for you. So you won't learn OpenGL in this class. If you want to create your own scences with advanced OpenGL features, here are some references:

About COMS W4167

Grading: We strive to maintain a fast, transparent and fair grading process:

Your final numerical grade will be an average of the numerical grades of all themes. The numerical grade of a theme will be an average of the numerical grades of all milestones in that theme.

Due dates: Weekly deadlines are due on the date and time indicated in the assignment handout, usually at 10:00PM of the day. They must be submitted electronically, as detailed in the assignment.

Lateness policy: Late submissions lose 1% per six minutes of lateness. For example: a submission that is two hours late is penalized 20%, and a submission that is ten hours late receives no credit. Rationale: Since weekly milestones build on each other, we must ensure that all students begin each week at an equal playing field. By enforcing a strict lateness policy, we will be able to post the solution to each milestone shortly after it is due, thereby enabling students to build on a solid foundation in the following week.
Plan ahead. The only exception to this policy is a documented medical emergency. In order to ensure fair grading, exceptions are not possible for holidays, sport meets, theater appearances, indigestion, job interviews, etc. Plan ahead.

Curving and Final Grade: This class will *not* be curved down. A student achieving a certain percentage grade has a guaranteed minimum letter grade. We reserve the right to curve all grades uniformly upward (improving your letter grade) subject to our discretion. The minimum grade distribution for this class will be given by evaluating the student's numerical grade, after adjusting for lateness and extra credit, following the table

with modifiers (+ and -) left to the instructor's discretion subject to considerations such as relative ranking to other students, quality of submitted code, uniformity of quality across assignments, engagement in the class.

Questions, help, discussion: The instructors and TAs are available to answer questions, advise on projects, or just to discuss interesting topics related to the class at office hours and by appointment as needed. For electronic communication we are using Piazza (link also available at the top of this page). Please sign up for the Piazza page. When posting questions, please keep them organized by posting them to specific folders.

You are welcome (encouraged, even) to discuss the homeworks and projects among yourselves in general terms. But when you start writing up the homeworks or implementing the projects, you need to be working alone. In particular, it is never permitted for you to see another student's homework writeup or other's program code, and certainly never tolerated to copy parts of one person's writeup, code, or results into another's, even if the general solution was worked out together.

You're also encouraged to read any published sources—books, articles, public web sites—that help you learn. If you find an idea in one of these sources that becomes part of your solution (or even gives you the whole solution), that's fine, but it is imperative that you explicitly cite the source on your homework or state it in a comment of your code. Otherwise you would be falsely claiming to have invented the idea yourself.

Academic integrity: We expect complete integrity from everyone. We assume the work you hand in is your own, and the results you hand in are generated by your program. You're welcome to read whatever you want to learn what you need to do the work, but we do expect you to build your own implementations of the methods we are studying. If you're ever in doubt, just include a citation in your code or report indicating where some idea came from, whether it be a classmate, a web site, another piece of software, or anything—this always maintains your honesty, whether the source was used in a good way or not. The principle is that an assignment is an academic document, like a journal article. When you turn it in, you are claiming that everything in it is your original idea (or is original to you and your partner, if you're handing in as a pair) unless you cite a source for it. it's never OK for you to see another student's homework writeup or another team's program code, and certainly never OK to copy parts of one person's or team's writeup, code, or results into another's, even if the general solution was worked out together.

Cases that violate the academic integrity include (not exclusively):

School can be stressful, and your coursework and other factors can put you under a lot of pressure, but that is never a reason for dishonesty. If you feel you can't complete the work on your own, come talk to the professor or the TAs, or your advisor, and we can help you figure out what to do. Think before you hand in!

Clear-cut cases of dishonesty will result in failing the course.

For more information see Columbia Engineering's Code of Academic Integrity.

Open Door Policy: We hope the course to run smoothly and enjoyably. Feel free to let us know if you find the course helpful and interesting. Especially, let us know sooner about the reverse. Drop by our office hours, leave us a note, or send us an email.