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); }