Пример #1
0
    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);
        }
    }
Пример #2
0
        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);
        }
Пример #3
0
        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));
        }
Пример #4
0
        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");
        }
Пример #5
0
        void CreateHybrid()
        {
            var relative = ReferenceFrame.CreateRelative(connection, reference_, targetPosition.ToTuple());

            hybrid = ReferenceFrame.CreateHybrid(connection, relative, surfaceRef);
        }