diff --git a/scripts/orbits/IOrbitalElementsExtensions.cs b/scripts/orbits/IOrbitalElementsExtensions.cs new file mode 100644 index 0000000..f8dbda1 --- /dev/null +++ b/scripts/orbits/IOrbitalElementsExtensions.cs @@ -0,0 +1,13 @@ +using Vim.Math3d; +using static System.Math; + +public static class IOrbitalElementsExtensions +{ + /// + /// Get the Cartesian position on the orbit for a given mean anomaly. + /// + /// Mean anomaly + /// Position + public static DVector2 GetEccentricPosition2D(this OrbitalElements elements, double M) => + Kepler.GetEccentricPosition2D(elements.e, elements.a, M); +} \ No newline at end of file diff --git a/scripts/orbits/OrbitalElements.cs b/scripts/orbits/OrbitalElements.cs new file mode 100644 index 0000000..c501dc8 --- /dev/null +++ b/scripts/orbits/OrbitalElements.cs @@ -0,0 +1,46 @@ +public struct OrbitalElements +{ + private Ellipse _ellipse; + /// + /// Semi-major axis in AU + /// + public double a => _ellipse.a; + /// + /// Eccentricity + /// + public double e => _ellipse.e; + /// + /// Inclination in degrees + /// + public double i { get; private set; } + /// + /// Argument of ascending node in degrees + /// + public double W { get; private set; } + /// + /// Argument of periapsis in degrees + /// + public double p { get; private set; } + /// + /// Mean anomaly at epoch + /// + public double M0 { get; private set; } + + /// + /// + /// + /// Semi-major axis in AU + /// eccentricity + /// Inclination in degrees + /// Argument of ascending node in degrees + /// Argument of periapsis in degrees + /// Mean anomaly at epoch + public OrbitalElements(double a, double e, double i, double W, double p, double M0) + { + _ellipse = new Ellipse(a, e); + this.i = i; + this.W = W; + this.p = p; + this.M0 = M0; + } +} \ No newline at end of file