My God, It’s Full Of Stars: The N-Body-Problem Series

I thought it would be a very nice idea to start my blog with a small project I wanted to do since a long time. A small tool/solver of the n-body-problem. It's not just only the interest of solving a challenging mathematical problem with modern C++. I also love clean, concise and readable code, which is also something I would like to train and share with this project. You can find the empty repository setup at GitHub. I will always try to tag the end state of the repository after each post of this blog series.

Hero Image: Particles

So lets start with the bare minimum of theory we need. We want to start with a simple example of two still standing masses (or stars if you like) which get attracted to each other. For the sake of simplicity we consider them as point masses which mean they are infinitesimal small, or in other words, they have no volume.

Kinematics of a point mass
Kinematic quantities of a classical particle of mass m: position r, velocity v, acceleration a (Wikipedia)

From the image above we can see that a particle is moving the path $dr$, with its velocity $v$ and accelerated by $a$. From this point we get the equations of motion of one such point as


with $r$ as the resulting position, $r_{0}$ as the starting position, $v$ as the velocity, $t$ as the time step and $a$ as the acceleration. We also know that the force is defined by the product of mass $m$ and the acceleration $a$


We know as well that the force due to gravity between two masses can be calculated as


with the gravitational constant $G$ the two masses of them and their distance $r$. With the equations of the force and the force due to gravity, we can derive the acceleration $a$ a mass point is experiencing while he is attracted by another mass point.


As a result we get our final equation which is deriving the change of position of a mass point by its starting position, its velocity and its acceleration.


With this I will close this post and we will proceed next time with setting up a basic CMAKE example project which is building our solver library and a separate test library.

Since you've made it this far, sharing this article on your favorite social media network and giving feedback would be highly appreciated 💖!



Please also join my mailing list, seldom mails, no spam, and no advertising. By clicking submit, you agree to share your email address with the site owner and Mailchimp to receive updates from the site owner. Use the unsubscribe link in those emails to opt out at any time. You can unsubscribe at any time by clicking the link in the footer of our emails. For information about our privacy practices, please visit our website. We use Mailchimp as our marketing platform. By clicking below to subscribe, you acknowledge that your information will be transferred to Mailchimp for processing. Learn more about Mailchimp's privacy practices here.