Пример #1
0
        public static AgcTuple nodeVector(double inc, string direction)
        {
            var b = Math.Tan(90 - inc) *
                    Math.Tan(Globals.KrpConnection.SpaceCenter().ActiveVessel.Flight().Latitude);

            b = Math.Asin(Math.Min(Math.Max(-1, b), 1));
            var yVec = new AgcTuple(0, 1, 0);

            var longitudeVector = AgcMath.map(
                yVec,
                AgcMath.normalize(Globals.KrpConnection.SpaceCenter().ActiveVessel.Orbit.Body.Position(
                                      Globals.KrpConnection.SpaceCenter().ActiveVessel.ReferenceFrame
                                      ))
                );

            switch (direction)
            {
            case "north":
                return(rodrigues(longitudeVector, yVec, b));

            case "south":
                return(rodrigues(longitudeVector, yVec, 180 - b));

            default:
                return(nodeVector(inc, "north"));
            }
        }
Пример #2
0
        public static AgcTuple rodrigues(AgcTuple inVector, AgcTuple axis, double angle)
        {
            axis = AgcMath.normalize(axis);
            var outVector = inVector * Math.Cos(angle);

            outVector += AgcMath.cross(axis, inVector) * Math.Sin(angle);
            outVector += axis * AgcMath.dot(axis, inVector) * (1 - Math.Cos(angle));

            return(outVector);
        }
Пример #3
0
        public static AgcTuple solarPrimeVector(ReferenceFrame referenceFrame)
        {
            var      sun = Globals.KrpConnection.SpaceCenter().Bodies["Sun"];
            var      secondsPerDegree = sun.RotationalPeriod / 360;
            var      rotationOffset   = (Globals.KrpConnection.SpaceCenter().UT / secondsPerDegree) % 360;
            AgcTuple sunPosition      = sun.Position(referenceFrame);
            AgcTuple sunPosition2     = sun.SurfacePosition(0, 0 - rotationOffset, referenceFrame);


            var primeVector = sunPosition2 - sunPosition;

            return(AgcMath.normalize(primeVector));
        }