public Vector3d GetWaypointPosition(double latitude, double longitude, CelestialBody body, Vector3d bodyPosition, double time) { Planetarium.CelestialFrame BodyFrame = default; if (body.rotationPeriod != 0) { var rotPeriodRecip = 1.0 / body.rotationPeriod; var rotationAngle = (body.initialRotation + 360.0 * rotPeriodRecip * time) % 360.0; var directRotAngle = (rotationAngle - Planetarium.InverseRotAngle) % 360.0; Planetarium.CelestialFrame.PlanetaryFrame(0.0, 90.0, directRotAngle, ref BodyFrame); } return(BodyFrame.LocalToWorld(body.GetRelSurfacePosition(latitude, longitude, 0).xzy).xzy + bodyPosition); }
public void Adjust(Vector3d dir) { if (referenceSystem.space == Space.Self) { dir = objectFrame.LocalToWorld(dir.xzy); } else { dir = worldFrame.LocalToWorld(dir.xzy); } SetPosition(dir * increment.Increment); RestoreLatitude(); RestoreLongitude(); onPositionChange.Invoke(); }