COSC 89.18/189: Computational Methods for Physical Systems, Winter 2019
From Hollywood visual effects to EA game engines, from virtual dressing mirrors to drone design, and from soft exosuits to Origami robots, computer-based modeling and simulation of physical systems are essential in various fields related to entertainment, manufacturing, and scientific research. This course introduces mathematical and algorithmic techniques to simulate, design, and make various physical systems, with applications to computer graphics, animation, robotics, and 3D printing. We will introduce classical numerical algorithms to simulate rigid body, soft body, fluid, and cloth, as well as control and optimization algorithms to design drones and 3D printable objects. The theoretical underpinnings are formed by multi-variable calculus, linear algebra, unconstrained and constrained optimizations, and introductory-level topics in continuum mechanics.
This course will focus on the design and implementation of physical computing algorithms and their connections to the real world. You will learn how to progress from abstract mathematical models on to concise and efficient programs on to the fabrication of actual physical objects that can be grasped in one's hand. During the quarter, we will have a "Drone Day" to fly drones controlled by your own implemented simulation algorithm and a "3D Printing Day" to teach you 3D print your optimized designs.
[01/04/19] Lecture 1 slides and Assignment 0 were posted in Canvas.
Instructor: Bo Zhu (Sudikoff 153)
Teaching assistant: Dario Seyb (Sudikoff 142)
Class Time: Tuesday/Thursday, 2:25pm-4:15pm
X-Hours: Wednesday, 4:35pm-5:25pm
Office Hours:, Professor, Tuesday/Thursday 4:30-5:30pm, Sudikoff 153; TA, TBD, Sudikoff 142
Location: Kemeny Hall 008
We will use Piazza for our class discussion. Here is the link: https://piazza.com/dartmouth/winter2019/cosc891818902/home.
The reading materials for the course include a bunch of course notes and papers, covering the topics of rigid body, soft body, cloth, and fluid simulation.
This course assumes an understanding of multi-variable calculus and linear algebra. Students are recommended to take COSC 50 as a prerequisite or to show equivalent understanding and comfortableness with programming in C++.
Assignments and Projects:Grading policies::
There are four short programming assignments (100 lines C++ code) during the quarter, corresponding to the mathematical foundations, rigid body, deformable body, and fluid. In each assignment, you are expected to implement some critical parts of the numerical algorithm taught in class. A sample code will be delivered for each assignment.Presentation:
You are expected to exercise two in-class presentations, including a presentation of a technical paper relevant to one of the class topics and a presentation for the final project at the end of the quarter.Final Project:
We will send out an assignment for each simulation topic every one or two weeks. Each assignment includes 1-point, 2-point, and 3-point requirements. Typically, a 1-point assignment asks you to write a piece of C++ code to implement some critical parts of a simulation algorithm taught in class; a 2-point assignment requires implementing a more advanced algorithm with 2-300 lines of code; and for a 3-point assignment you need to finish the implementation of the central part a classical paper in physics simulation. You need to get 4 points in total for the full 40% assignment credits. You will obtain an up to 3% bonus if you finish 5 points or more for the programming assignments before the end of the quarter.
We encourage you to customize your path for programming practices. You may take four assignments in four different topics to get tastes of different simulation problems and then pick one theme for your final project. Or, You may also dive into one or two simulation topics that you are strongly interested in at the very beginning and fully develop your mathematical and programming skills by working on them intensively before you start your final project on the same topic.
You are encouraged to take advantage of your assignments and starter codes we have provided to help your final project. But the workloads for the assignments and the final projects need to be distinguished clearly and can't be double-counted.
The following is a tentative lecture schedule. It will be updated dynamically as the course proceeds.
Week 1: Introduction
Jan 3 (Th): Physical computing in animation, robotics, and fabricatoin
Week 2: Mathematical foundations
Jan 8 (Tu): Mathematical foundation of shape and motion
Jan 10 (Th): Particle system, collisions, and your first physics engine
Assignment 1 handed out
Week 3: Rigid body and drones
Jan 15 (Tu): Rigid body dynamics
Jan 17 (Th): PID control and Drones
Week 4: Articulation and character animation
Jan 22 (Tu): Articulation and inverse kinematics
Jan 24 (Th): Character animation, rigid-body robots
Week 5: Deformable body and 3D printing
Jan 29 (Tu): Deformable body and finite element method
Jan 31 (Th): Topology optimization, computational fabrication, and 3D printing
Assignment 3 handed out;Assignment 2 due
Week 6: Cloth and Origami
Feb 5 (Tu): Mass-spring model and cloth simulation
Feb 7 (Th): Thin shell, folding, and Origami
Week 7: Fluid and physically-based animation
Feb 12 (Tu): Introduction to fluid simulation
Feb 14 (Th): Particle fluid and visual special effects
Assignment 4 handed out;Assignment 3 due
Week 8: Multi-physics system and soft robots
Feb 19 (Tu): Solid-fluid interaction and soft robotic modeling
Feb 21 (Th): The 3D Printing Day, fabricate your own robot, in Thayer Machine Shop
Week 9: Real-time simulation
Feb 26 (Tu): Reduced models and fast simulations for gamesFeb 28 (Th): The Drones Day, fly your own drone, location TBD
Assignment 4 due
Week 10: Not the end
Mar 5 (Tu): Summary: creating your own physical world