From e20b8ff7377032df400cc068825fcbe4b56d8ebc Mon Sep 17 00:00:00 2001 From: Nick Date: Tue, 10 May 2022 15:48:16 -0400 Subject: [PATCH] Fix initial velocity direction --- NewHorizons/Components/Orbital/OrbitalParameters.cs | 9 +++++++-- NewHorizons/Handlers/PlanetCreationHandler.cs | 4 ++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/NewHorizons/Components/Orbital/OrbitalParameters.cs b/NewHorizons/Components/Orbital/OrbitalParameters.cs index dadceba8..a0f0ea8e 100644 --- a/NewHorizons/Components/Orbital/OrbitalParameters.cs +++ b/NewHorizons/Components/Orbital/OrbitalParameters.cs @@ -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; diff --git a/NewHorizons/Handlers/PlanetCreationHandler.cs b/NewHorizons/Handlers/PlanetCreationHandler.cs index be2d3c76..aab52f86 100644 --- a/NewHorizons/Handlers/PlanetCreationHandler.cs +++ b/NewHorizons/Handlers/PlanetCreationHandler.cs @@ -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 {