public static void Main() { var conn = new Connection("Landing Site"); var vessel = conn.SpaceCenter().ActiveVessel; var body = vessel.Orbit.Body; // Define the landing site as the top of the VAB double landingLatitude = -(0.0 + (5.0 / 60.0) + (48.38 / 60.0 / 60.0)); double landingLongitude = -(74.0 + (37.0 / 60.0) + (12.2 / 60.0 / 60.0)); double landingAltitude = 111; // Determine landing site reference frame // (orientation: x=zenith, y=north, z=east) var landingPosition = body.SurfacePosition( landingLatitude, landingLongitude, body.ReferenceFrame); var qLong = Tuple.Create( 0.0, Math.Sin(-landingLongitude * 0.5 * Math.PI / 180.0), 0.0, Math.Cos(-landingLongitude * 0.5 * Math.PI / 180.0) ); var qLat = Tuple.Create( 0.0, 0.0, Math.Sin(landingLatitude * 0.5 * Math.PI / 180.0), Math.Cos(landingLatitude * 0.5 * Math.PI / 180.0) ); var landingReferenceFrame = ReferenceFrame.CreateRelative( conn, ReferenceFrame.CreateRelative( conn, ReferenceFrame.CreateRelative( conn, body.ReferenceFrame, landingPosition, qLong), Tuple.Create(0.0, 0.0, 0.0), qLat), Tuple.Create(landingAltitude, 0.0, 0.0)); // Draw axes var zero = Tuple.Create(0.0, 0.0, 0.0); conn.Drawing().AddLine( zero, Tuple.Create(1.0, 0.0, 0.0), landingReferenceFrame); conn.Drawing().AddLine( zero, Tuple.Create(0.0, 1.0, 0.0), landingReferenceFrame); conn.Drawing().AddLine( zero, Tuple.Create(0.0, 0.0, 1.0), landingReferenceFrame); while (true) { System.Threading.Thread.Sleep(1000); } }
public static ReferenceFrame CreateLaunchPadRef(Connection conn) { var vessel = conn.SpaceCenter().ActiveVessel; var body = vessel.Orbit.Body; // Launchpad coordinates double landingLatitude = -0.0972069432271304; double landingLongitude = -74.557630926517; double landingAltitude = 8; // Determine landing site reference frame // (orientation: x=zenith, y=north, z=east) var landingPosition = body.SurfacePosition( landingLatitude, landingLongitude, body.ReferenceFrame); var qLong = Tuple.Create( 0.0, Math.Sin(-landingLongitude * 0.5 * Math.PI / 180.0), 0.0, Math.Cos(-landingLongitude * 0.5 * Math.PI / 180.0) ); var qLat = Tuple.Create( 0.0, 0.0, Math.Sin(landingLatitude * 0.5 * Math.PI / 180.0), Math.Cos(landingLatitude * 0.5 * Math.PI / 180.0) ); var landingReferenceFrame = ReferenceFrame.CreateRelative( conn, ReferenceFrame.CreateRelative( conn, ReferenceFrame.CreateRelative( conn, body.ReferenceFrame, landingPosition, qLong), Tuple.Create(0.0, 0.0, 0.0), qLat), Tuple.Create(landingAltitude, 0.0, 0.0)); // Draw axes //var zero = Tuple.Create(0.0, 0.0, 0.0); //conn.Drawing().AddLine( // zero, Tuple.Create(1.0, 0.0, 0.0), landingReferenceFrame); //conn.Drawing().AddLine( // zero, Tuple.Create(0.0, 1.0, 0.0), landingReferenceFrame); //conn.Drawing().AddLine( // zero, Tuple.Create(0.0, 0.0, 1.0), landingReferenceFrame); return(landingReferenceFrame); }
Vector3 TargetPosition(ReferenceFrame referenceFrame)//如果把另一个vessel设为目标(比如回收用的船),则返回这个vessel的位置, 否则返回由给定经纬度和高度确定的位置 { if (targetVirtual == null) { if (target == null) { targetFixedPos = body.PositionAtAltitude(Lat, Lon, Height + body.SurfaceHeight(Lat, Lon), bodyRef).ToVec(); targetVirtual = ReferenceFrame.CreateHybrid(connection, ReferenceFrame.CreateRelative(connection, bodyRef, targetFixedPos.ToTuple()), surfaceRef); } else { targetVirtual = target.SurfaceReferenceFrame; } } //return connection.SpaceCenter().TransformPosition(targetFixedPos.ToTuple(), bodyRef, referenceFrame).ToVec(); return(-data.GetPosition(targetVirtual)); }
public static void Start(Connection conn) { var vessel = conn.SpaceCenter().ActiveVessel; var gravidade = vessel.Orbit.Body.SurfaceGravity; var massaTotal = conn.AddStream(() => vessel.Mass); var voo = vessel.Flight(vessel.Orbit.Body.ReferenceFrame); var velocidadeVertical = conn.AddStream(() => voo.VerticalSpeed); var retrogrado = conn.AddStream(() => voo.Retrograde); Lancar(vessel); vessel.AutoPilot.Engage(); while (true) { var reference = ReferenceFrame.CreateRelative(conn, vessel.AutoPilot.ReferenceFrame, retrogrado.Get()); vessel.AutoPilot.ReferenceFrame = reference; } conn.Dispose(); Console.WriteLine("Fim"); }
void CreateHybrid() { var relative = ReferenceFrame.CreateRelative(connection, reference_, targetPosition.ToTuple()); hybrid = ReferenceFrame.CreateHybrid(connection, relative, surfaceRef); }