Numerical Computing, Project ideas
A typical project would involve reading a paper or
a chapter from a book, and implementing
the technique described there. For some projects, additional code
will be provided, if you choose to do it.
- As-rigid-as-possible 2d deformations
link
Implement an interactive tool for deforming two-dimensional object
(e.g., for animating a character) which keeps the object as rigid as possible.
The user moves some points on the object to new positions; a system of equations is constructed
and solved at each step to find new positions.
- Snakes (Active contours)
link
Snakes are widely used in medical imaging to find feature curves in images,
such as boundaries between organs. A snake is a curve moving through the image
under several forces. One force (bending) tries to keep is smooth; another force
pushes it towards locations in the image where a feature is likely to be.
- Cloth simulation with implicit time-stepping (no collisions)
link 1,
link 2
Implement a simple 3D cloth simulator, with bending, stretching and damping forces
included, and implicit time stepping which
The cloth itself is a grid of masses connected to each other by springs.
The important differences from the spring simulator we have is that the
whole thing should be in 3D and include bending and damping forces.
-
Intrinsic surface parametrization with natural boundary conditions
least-squares conformal and autalic
link
Mesh parametrization (that is, assigning planar coordinates to vertices of a mesh)
is a common operation used, most commonly for texture mapping (changing surface color
or other properties according to color variation in an image). Parametrization
is used for a variety of other purposes, from remeshing for engineering simulations
to mapping the brain surface in medical imaging.
-
Inverse kinematics/robot simulator
link
Articulated objects consisting of rigid joints that can rotate with respect
to each other are common in animation and robotics. It is often necessary
to figure out the joint angle rotations so that some of the parts of the
object are in particular positions, which requires solving a nonlinear
system of equations efficiently. Implement a system that would allow to
compute how the joint angles should change for a robotic arm or character
extermities to follow user-defined trajectories.
-
Radiosity algorithm
One way to simulate lighting is to write the light balance equation
(all the light reflected from a small area A is the sum of light
reflected from all other areas in the direction of A, scaled by
A's reflectance coefficient). Radiosity is a method for computing
lighting based on solving a linear system of equations obtained in this way.
It adavantages include ability to handle multiple diffuse reflections
and soft shadows. Implement a full-matrix version with piecewise constant elements.
If you decide to work on this project, I'll give you a copy
of several chapters of a book describing the details of the algorithm.
The wikipedia article
provides an overview.
-
Poisson image editing
link
In photo editing, one often wants to combine parts of different images
in a seamless way. It turns out that one way to do it is to solve a particular
type of Poisson equation numerically. Implement an image editing system
that allows you to do seamless cloning and color transfer as described in the paper.
- Reaction diffusion textures.
link 1
link 2
Many natural patterns (stripes on a zebra, mosaic patterns on skin etc)
arise from growth driven by chemical gradients. One can use relatively
simple equations (reaction-diffusion equations) to describe such growth.
Changing parameters in these equations allows one to obtain different
interesting patterns. Implement a tool for generating reaction-diffusion
textures as described in the second paper, reproduce some of the patterns
presented there and design new ones.