Ich habe die 6 Orbitalelemente (ohne die Zeit der Periapsispassage natürlich), 2 Zustandsvektoren und viele andere Parameter wie die Umlaufzeit. Ich möchte sie verwenden, um die Zeit bis zur Periapsis und die Zeit bis zur Apoapsis zu berechnen.
Um Ihnen eine bessere Vorstellung von den Werten zu geben, die ich bereits habe, ist hier mein Code, der alle Daten berechnet, die sich auf die Umlaufbahn beziehen:
void CalculateOrbitalData(Vector3 pos1, Vector3 vel1, float m1) {
Vector3 pos2 = planet.position;
Vector3 vel2 = planet.velocity;
float m2 = planet.mass;
//Relative Position Vector
Vector3 r = pos1 - pos2;
//Distance between bodies
float rmag = r.magnitude;
//Relative Velocity Vector
Vector3 v = vel1 - vel2;
//Specific Angular Momentum
Vector3 h = Vector3.Cross(r, v);
//Standard Gravitational Parameter
float µ = World.G * m2;
//Eccentricity Vector
Vector3 evec = (Vector3.Cross(v, h) / µ) - (r / Vector3.Magnitude(r));
//Eccentricity
float e = Vector3.Magnitude(evec);
//Vector to Ascending Node
Vector3 n = new Vector3(-h.x, h.z, 0);
//True Anomaly
float t = Mathf.Acos((Vector3.Dot(evec, r)) / (e * Vector3.Magnitude(r)));
if (Vector3.Dot(r, v) < 0)
t = (2 * Mathf.PI) - t;
//Longitude of Ascending Node (2D)
float Ω = 0;
//Inclination (2D)
float i = 0;
//Argument of Periapsis
float ω = Mathf.Atan2(evec.y, evec.x);
float ωdegrees = ω * (180 / Mathf.PI);
if (e == 0) {
ω = 0;
ωdegrees = 0;
}
//Eccentric Anomaly
float E = 2 * Mathf.Atan(Mathf.Tan(t / 2) / Mathf.Sqrt((1 + e) / (1 - e)));
//Mean Anomaly
float M = E - (e * Mathf.Sin(E));
//Semi-Major Axis
float a = 1 / ((2 / Vector3.Magnitude(r)) - (Mathf.Pow(Vector3.Magnitude(v), 2) / µ));
//Apoapsis
float ap = a * (1 + e);
//Periapsis
float pe = a * (1 - e);
//Orbital Period
float T = (2 * Mathf.PI) * Mathf.Sqrt(Mathf.Pow(a, 3) / µ) / 60;
//patch orbital period to stay in line with unity timestep
float fT = T * 1.205f;
//Mean motion
float m = (2 * Mathf.PI) / fT;
//Perifocal distance
float rp = (Vector3.Dot(h, h) / µ) / e + 1;
}
Sie scheinen nach der Zeitgleichung zu suchen:
wo ist Zeit u ist die exzentrische Anomalie. Es sieht so aus, als hätten Sie zur "aktuellen" Zeit die exzentrische Anomalie. Sie können das einfach anschließen, um die Zeit relativ zur Periapsis zu sehen, die um ist und . Für die Zeit bei Apoapsis einstecken . Eine Umlaufzeit ist Laufen über eine Reihe von , also ist die Periode:
Ihre Zeit seit Periapsis ist also , und Ihre Zeit bis zur nächsten Periapsis ist (vorausgesetzt, dass ist in zu ).
Markus Adler
Waffel
Benutzer19847