My relevant knowledge:

This question works in two dimensions, with a two-body problem (see bottom for context).

To my understanding, a two-dimensional orbit has the following orbital elements (3D has 3 more, I believe):

  • Semimajor axis: Half the distance from periapsis to apoapsis, in kilometers
  • Eccentricity: The variation of the orbit from a perfect circle, unitless from 0 to 1
  • Rotation/Longitude of Periapsis: The angle from the periapsis to a reference direction with the orbited body as the vertex, in radians


Given a burn of ΔV (meters per second) in either the prograde, retrograde, radial, or anti-radial direction, how can I calculate the orbital elements of the new orbit? That is, what equations give the effect of a burn in one of those four directions on the semimajor axis, eccentricity, and rotation of the orbit?

If the burn is a combination of two directions (say, <-100, 200> which is to say a burn that changes velocity 100m/s in the retrograde direction and 200m/s in the radial direction), do I simply use the equations separately and combine the effects by, say, multiplication?


This is not homework - just a personal project. I'm a beginner to orbital physics, attempting to write a space simulator program in Java based on the patched conic approximation. My simulator stores the motion of a body using the three elements I listed, as well as if the direction is clockwise or counter-clockwise. The position of the body is stored as the mean anomaly along the orbit. I simulate the actual motion on the screen by using the orbital period to find the change in mean anomaly over the time that has passed. And to retrieve the actual velocity of the body I just have to calculate it using the orbital elements and the mass of the orbited body.

This is the best approach I could come up with for programmatically simulating orbital mechanics. If you have any suggestions for an improved way of storing the motion and position of bodies in the patched conic approximation, or an improved idea on changing the orbital elements with velocity changes in one of the four directions, feel free to let me know.

  • $\begingroup$ Kerbal Space Program? $\endgroup$ Commented Oct 13, 2015 at 15:36
  • $\begingroup$ @CarlWitthoft Kerbal Space Program. I'm making something very similar. $\endgroup$ Commented Oct 13, 2015 at 15:37
  • $\begingroup$ I would just track the state vectors instead of the orbital elements. The equations of motions are fairly simple ($\ddot{\vec{r}} = -\frac{\mu}{r^2}\vec{r}$), and I don't remember the level of accuracy of propagating just from mean/true anomaly. $\endgroup$
    – costrom
    Commented Oct 13, 2015 at 17:03
  • 1
    $\begingroup$ @costrom The advantage to using the orbital elements and anomaly is that mean anomaly has a constant velocity. No matter how I code the actual frame-by-frame motion, I'm going to have to code all the conversions between rectangular vectors, polar, anomalies, and orbital elements (my program draws an ellipse to show the orbit, which needs the elements, and the actual location of the body, which needs the rectangular). Since all those functions are already built in, I figured I should use the most simply-changed position storage method, which is mean anomaly, as its velocity is constant. $\endgroup$ Commented Oct 13, 2015 at 17:22

1 Answer 1


All classical orbital elements can be found with just the two state vectors $\vec{r}$ and $\vec{v}$, and the gravitational parameter of the body the object is orbiting (assuming a 2-body problem)

Orbital eccentricity can be found as the magnitude of the eccentricity vector, using the formulas found on this page.

Semimajor axis can be found similarly, using the state vectors, with these equations.

Finally, the argument of periapsis (here equal to the longitude since the RAAN is zero) can be found with the following equation:

$\omega = arccos\frac{\vec{n}\cdot\vec{e}}{|\vec{n}||\vec{e}|}$

where $\vec{n} = \hat{k}\times (\vec{r}\times\vec{v})$

  • $\begingroup$ What is k in the last equation? $\endgroup$ Commented Oct 13, 2015 at 19:03
  • $\begingroup$ $\hat{k}$ is the unit vector in the z-direction, i.e. the vector <0,0,1>. You need to use it to ensure $\vec{n}$ lies in the x-y plane $\endgroup$
    – costrom
    Commented Oct 13, 2015 at 19:05
  • $\begingroup$ In my case r=<r1, r2, 0> and v=<v1, v2, 0>, right? So when I perform (r⃗ ×v⃗ ), I get the vector <0, 0, r1v2-r2v1>, and then when I cross product <0, 0, 1> with that, I get <0, 0, 0>. Am I doing something wrong? $\endgroup$ Commented Oct 13, 2015 at 19:12
  • $\begingroup$ I had noticed that issue when I was reading the equations for the COE's... Everything I saw in the small research I did showed that it's all related to the ascending node (of which there really isn't one in a 2-D orbit). Those results you show are consistent, but I am not sure where to go from there. $\endgroup$
    – costrom
    Commented Oct 13, 2015 at 19:17
  • 1
    $\begingroup$ In the wikipedia article you linked for eccentricity it says the eccentricity vector is the vector that points to the periapsis. So perhaps the longitude of the periapsis is the arccot of the eccentricity vector? $\endgroup$ Commented Oct 13, 2015 at 19:22

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.