Flat circular orbits work

This commit is contained in:
Nick 2022-04-10 15:49:51 -04:00
parent b02d98f0fc
commit a319f0bb60
3 changed files with 7 additions and 5 deletions

View File

@ -45,8 +45,7 @@ namespace NewHorizons.Builder.Orbital
var secondaryGravity = new Gravity(secondaryBody.GetGravityVolume()); var secondaryGravity = new Gravity(secondaryBody.GetGravityVolume());
var velocity = orbit.GetOrbitalParameters(primaryGravity, secondaryGravity).InitialVelocity; var velocity = orbit.GetOrbitalParameters(primaryGravity, secondaryGravity).InitialVelocity;
// For some stupid reason the InitialMotion awake method transforms the perfectly fine direction vector you give it so we preemptively do the inverse so it all cancels out initialMotion._initLinearDirection = velocity.normalized;
initialMotion._initLinearDirection = body.transform.InverseTransformDirection(velocity.normalized);
initialMotion._initLinearSpeed = velocity.magnitude; initialMotion._initLinearSpeed = velocity.magnitude;
} }
} }

View File

@ -63,13 +63,13 @@ namespace NewHorizons.Components.Orbital
var x = r * (Mathf.Cos(la) * Mathf.Cos(ap + f) - Mathf.Sin(la) * Mathf.Sin(ap + f) * Mathf.Cos(i)); var x = r * (Mathf.Cos(la) * Mathf.Cos(ap + f) - Mathf.Sin(la) * Mathf.Sin(ap + f) * Mathf.Cos(i));
var y = r * (Mathf.Sin(la) * Mathf.Cos(ap + f) - Mathf.Cos(la) * Mathf.Sin(ap + f) * Mathf.Cos(i)); var y = r * (Mathf.Sin(la) * Mathf.Cos(ap + f) - Mathf.Cos(la) * Mathf.Sin(ap + f) * Mathf.Cos(i));
var z = r * (Mathf.Sin(i) * Mathf.Sin(ap + f)); var z = r * (Mathf.Sin(i) * Mathf.Sin(ap + f));
orbitalParameters.InitialPosition = new Vector3(x, z, y); orbitalParameters.InitialPosition = new Vector3(x, y, z);
var coefficient = h * eccentricity * Mathf.Sin(f) / (r * p); var coefficient = h * eccentricity * Mathf.Sin(f) / (r * p);
var vx = x * coefficient - (h / r) * (Mathf.Cos(la) * Mathf.Sin(ap + f) + Mathf.Sin(la) * Mathf.Cos(ap + f) * Mathf.Cos(i)); var vx = x * coefficient - (h / r) * (Mathf.Cos(la) * Mathf.Sin(ap + f) + Mathf.Sin(la) * Mathf.Cos(ap + f) * Mathf.Cos(i));
var vy = y * coefficient - (h / r) * (Mathf.Sin(la) * Mathf.Sin(ap + f) - Mathf.Cos(la) * Mathf.Cos(ap + f) * Mathf.Cos(i)); var vy = y * coefficient - (h / r) * (Mathf.Sin(la) * Mathf.Sin(ap + f) - Mathf.Cos(la) * Mathf.Cos(ap + f) * Mathf.Cos(i));
var vz = z * coefficient + (h / r) * (Mathf.Sin(i) * Mathf.Cos(ap + f)); var vz = z * coefficient + (h / r) * (Mathf.Sin(i) * Mathf.Cos(ap + f));
orbitalParameters.InitialVelocity = new Vector3(vx, vz, vy); orbitalParameters.InitialVelocity = new Vector3(vx, vy, vz);
return orbitalParameters; return orbitalParameters;
} }

View File

@ -364,7 +364,10 @@ namespace NewHorizons.Handlers
{ {
var primaryGravity = new Gravity(primaryBody.GetGravityVolume()); var primaryGravity = new Gravity(primaryBody.GetGravityVolume());
var secondaryGravity = new Gravity(secondaryBody.GetGravityVolume()); var secondaryGravity = new Gravity(secondaryBody.GetGravityVolume());
go.transform.position = body.Config.Orbit.GetOrbitalParameters(primaryGravity, secondaryGravity).InitialPosition + primaryBody.transform.position;
var relativePosition = body.Config.Orbit.GetOrbitalParameters(primaryGravity, secondaryGravity).InitialPosition;
// Rotate it 90 degrees bc reasons
go.transform.position = Quaternion.AngleAxis(90, Vector3.left) * relativePosition + primaryBody.transform.position;
} }
else else
{ {