I'm making a game in which the goal is to get as many planets as possible to orbit around a star. The user launches planets at **any distance away** from the sun (as long as it's on-screen), and in **any direction** (possibly even directly at the sun, though their game won't last very long).

This means orbits can be circular, elliptical, or--more than likely--irregular, something like this:

[![https://gamedev.stackexchange.com/q/31007/15478][1]][1]

(Image originally from [here](https://gamedev.stackexchange.com/q/31007/15478))

The rules for my game that the player may launch planets as frequently as s/he likes...but they will **only** score a point for their **first revolution** (so spamming planets isn't likely to score very much).

Right now, the gravitational force is just `F = ma` (i.e. a constant force towards the sun). I'm trying to figure out when a planet in arbitrary orbit has completed a full revolution. This is how I'm doing it currently...

 // If this planet is active...
 Vector2 a = _body.position.normalized;
 Vector2 b = (a + _body.velocity).normalized;

 float angle = Vector2.Angle (a, b);
 this._total_angle += angle * Time.deltaTime;

 if (this._total_angle >= 360) {
 // If this planet has made a revolution...
 ++this._revolutions;
 this._total_angle = 0;
 this.OnRevolution.Invoke (this);
 }

However, this is incorrect for anything besides circular orbits. No good.

**Given all of this (and my near-total unfamiliarity with orbital mechanics), how can I tell when a planet in an arbitrary orbit has completed one full revolution?**

**EDIT:** No, the planets will *not* affect each other's orbits (though they can collide into one another, but they'll just explode).

 [1]: https://i.sstatic.net/UG1i4.png