# Project 2

CS 493, Dr. Lawlor

The idea for the projects is for you to write a complete end-to-end
simulator of something you're interested in: similar to the
homeworks, but in more *depth, *and on a *topic* of
your choice.

- Be ready to talk about what you want to build in-class on
Thursday, April 18. This session is designed as an
opportunity for N-way advice, discussion, and collaboration.

- Describe exactly what
**physics** you're planning to
simulate: what phenomena make it interesting, what it might be
useful for, and generally how it works.
- Describe exactly how you want to simulate it: what
**equations**
you'll use, how you'll **discretize** them, how you'll
ensure **stability, **how **fast** you expect it to
run, etc.

- Describe your
**user interface** for it. A good UI
is really important!

- Give me some rough draft code (working, but not complete) on
Thursday, April 25.
- Present your progress in-class on Thursday, May 2. Be
ready to talk for about 10 minutes.

- Turn in a final draft after the final exam on Tuesday, May
7. This version should (1) work completely, (2) look good,
and (3) have some attempt at a dimensional analysis--in the
code, you should explain what
**equations** and **units**
your simulation uses.

## Possible Topics (or pick your own!)

Choose any one of these topics, or pick your own topic. Remember you
have about a month to finish everything, so keep it simple! If these
seem too big, feel free to simplify them in your "topic" discussion.

- Extend any of your homeworks, from this class or another
class.
- Extend your project 1 topic (if you liked it!).

- Pick a technical paper you're interested in, and implement
something related.

- Do something interesting with 2D fluid dynamics: simulate
the combustion of gasses or solids, let solar heat and humidity
form clouds, switch the rectangular 2D grid to hexogonal by
adjusting the coordinate lookup, etc!

- Reaction-diffusion
textures (of any type), on the graphics card or off.
- Many independent agents, like people
fleeing a fire or a
freeway traffic jam.

- Simulate plant growth, such as via a pheremone signaling
equation, or something discrete like L
systems.

- Simulate waves, such as using the wave equation, or something
different like wave
particles or FFT
ocean synthesis.
- Rigid
bodies rotating and colliding in space. There are
lots of good libraries for this, including Newton and ODE.

- Non-rigid bodies, such as cloth,
clay, or rubber.
- Hair simulation, like mass-spring
models.
- Simple cellular automata (e.g., Conway's
Game of Life). These are especially fun to write on
the graphics card using a pixel shader!
- Or pick some other simulation you're interested in, and can
find useful data on!

Note that the above links are chosen purely on the basis of visual
coolness; better links explaining the above techniques undoubtably
exist!