Home Assignments Lecture Blog Resources Discussion Group

N-Body Simulation

We'll are working through the Princeton assignment at

Here in Part B, we are adding physics simulation and animation to the program created in Part A.

  • Your Body class should be extended with mutators so that the physics simulation can modify the velocities of each object
  • You should implement a method named step which takes a time parameter (double seconds) and moves the Body object given its internal velocity for that much time
  • You may internally represent forces, or you may calculate these from outside the Body
  • Your main routine should keep track of elapsed time and terminate the simulation when time has elapsed beyond the time limit provided at the command line
  • You may optionally (+1 pt extra credit) display elapsed time on the main screen

Here are the particular assignment requirements for us, as the Princeton material assumes Java, and we are using C++:

  • You should build a command-line app which accepts the same parameters as the one specified, and reads the universe file from stdin. Name your executable NBody, so you would run it with e.g:
./NBody 157788000.0 25000.0 < planets.txt
  • Please submit all files needed to build your project: .cpp's, any header files, and a Makefile
  • Include the planets.txt file and all associated GIF images with your submission, in the proper directory structure as required by your code
  • Fill out and include this ps3b-readme.txt file with your work
  • Make sure to do make clean before tarring up your code
  • Submit your work in a directory named ps3b

The TA should be able to type the following to run your code:

./NBody 157788000.0 25000.0 < planets.txt


Submit your work via Bottlenose:

Martin section (201):
Grinberg section (202):

The executable file that your Makefile builds should be called NBody (the grading script checks that this executable builds successfully.)

Grading rubric

core implementation8full & correct implementation=8 pts; nearly complete=6pts; part way=4 pts; started=2 pt
  1 planets revolve counter-clockwise (remember astronomical positive Y is SFML smaller Y
Makefile2Makefile included
  targets all and clean must exist
  all should build NBody
  must have dependencies correct
extra credit+1display elapsed time
 +1create new universe (and describe in readme)
 +1play sound file