Fix initial velocity direction

This commit is contained in:
Nick 2022-05-10 15:48:16 -04:00
parent f85c3ca825
commit e20b8ff737
2 changed files with 9 additions and 4 deletions

View File

@ -88,11 +88,16 @@ namespace NewHorizons.Components.Orbital
var x = r * Mathf.Cos(f);
var y = r * Mathf.Sin(f);
// Forgot to take the derivative of r as well with respect to f
var denominator = Mathf.Pow(eccentricity * Mathf.Cos(f) + 1, 2);
var dx = -p * Mathf.Sin(f) / denominator;
var dy = p * (eccentricity + Mathf.Cos(f)) / denominator;
var dir = Rotate(new Vector3(x, 0f, y).normalized, longitudeOfAscendingNode, inclination, argumentOfPeriapsis);
var up = Rotate(Vector3.up, longitudeOfAscendingNode, inclination, argumentOfPeriapsis);
var velocityDir = Rotate(new Vector3(dx, 0f, dy).normalized, longitudeOfAscendingNode, inclination, argumentOfPeriapsis);
var pos = r * dir;
var vel = v * Vector3.Cross(dir, up).normalized;
var vel = v * velocityDir;
orbitalParameters.InitialPosition = pos;
orbitalParameters.InitialVelocity = vel;

View File

@ -521,9 +521,9 @@ namespace NewHorizons.Handlers
var primaryGravity = new Gravity(primaryBody.GetGravityVolume());
var secondaryGravity = new Gravity(secondaryBody.GetGravityVolume());
var relativePosition = body.Config.Orbit.GetOrbitalParameters(primaryGravity, secondaryGravity).InitialPosition;
var orbit = body.Config.Orbit;
go.transform.position = relativePosition + primaryBody.transform.position;
go.transform.position = orbit.GetOrbitalParameters(primaryGravity, secondaryGravity).InitialPosition + primaryBody.transform.position;
}
else
{