public static void Velocity(OrbitDriver currentlyEditing, VelocityChangeDirection direction, double speed) { Vector3d velocity; switch (direction) { case VelocityChangeDirection.Prograde: velocity = currentlyEditing.orbit.getOrbitalVelocityAtUT(Planetarium.GetUniversalTime()).normalized *speed; break; case VelocityChangeDirection.Normal: velocity = currentlyEditing.orbit.GetOrbitNormal().normalized *speed; break; case VelocityChangeDirection.Radial: velocity = Vector3d.Cross(currentlyEditing.orbit.getOrbitalVelocityAtUT(Planetarium.GetUniversalTime()), currentlyEditing.orbit.GetOrbitNormal()).normalized *speed; break; case VelocityChangeDirection.North: var upn = currentlyEditing.orbit.getRelativePositionAtUT(Planetarium.GetUniversalTime()).normalized; velocity = Vector3d.Cross(Vector3d.Cross(upn, new Vector3d(0, 0, 1)), upn) * speed; break; case VelocityChangeDirection.East: var upe = currentlyEditing.orbit.getRelativePositionAtUT(Planetarium.GetUniversalTime()).normalized; velocity = Vector3d.Cross(new Vector3d(0, 0, 1), upe) * speed; break; case VelocityChangeDirection.Up: velocity = currentlyEditing.orbit.getRelativePositionAtUT(Planetarium.GetUniversalTime()).normalized *speed; break; default: throw new Exception("Unknown VelChangeDir"); } var tempOrbit = currentlyEditing.orbit.Clone(); tempOrbit.UpdateFromStateVectors(currentlyEditing.orbit.pos, currentlyEditing.orbit.vel + velocity, currentlyEditing.orbit.referenceBody, Planetarium.GetUniversalTime()); SetOrbit(currentlyEditing, tempOrbit); }
public static void Velocity(OrbitDriver currentlyEditing, VelocityChangeDirection direction, double speed) { Vector3d velocity; switch (direction) { case VelocityChangeDirection.Prograde: velocity = currentlyEditing.orbit.getOrbitalVelocityAtUT(Planetarium.GetUniversalTime()).normalized * speed; break; case VelocityChangeDirection.Normal: velocity = currentlyEditing.orbit.GetOrbitNormal().normalized * speed; break; case VelocityChangeDirection.Radial: velocity = Vector3d.Cross(currentlyEditing.orbit.getOrbitalVelocityAtUT(Planetarium.GetUniversalTime()), currentlyEditing.orbit.GetOrbitNormal()).normalized * speed; break; case VelocityChangeDirection.North: var upn = currentlyEditing.orbit.getRelativePositionAtUT(Planetarium.GetUniversalTime()).normalized; velocity = Vector3d.Cross(Vector3d.Cross(upn, new Vector3d(0, 0, 1)), upn) * speed; break; case VelocityChangeDirection.East: var upe = currentlyEditing.orbit.getRelativePositionAtUT(Planetarium.GetUniversalTime()).normalized; velocity = Vector3d.Cross(new Vector3d(0, 0, 1), upe) * speed; break; case VelocityChangeDirection.Up: velocity = currentlyEditing.orbit.getRelativePositionAtUT(Planetarium.GetUniversalTime()).normalized * speed; break; default: throw new Exception("Unknown VelChangeDir"); } var tempOrbit = currentlyEditing.orbit.Clone(); tempOrbit.UpdateFromStateVectors(currentlyEditing.orbit.pos, currentlyEditing.orbit.vel + velocity, currentlyEditing.orbit.referenceBody, Planetarium.GetUniversalTime()); SetOrbit(currentlyEditing, tempOrbit); }
public static void GetVelocity(OrbitDriver currentlyEditing, out VelocityChangeDirection direction, out double speed) { direction = VelocityChangeDirection.Prograde; speed = 0; }