예제 #1
0
        public static Astronomical <TAngular> InstantaneousToApparentPlace <TAngular>(ICartesian3D InstantaneousTerrestrial,
                                                                                      AngularUnit greenwichApparentSideralTime,
                                                                                      AngleRange horizontalAngleRange)
            where TAngular : AngularUnit, new()
        {
            Matrix rZ = CalculateRotationMatrixAroundZ(greenwichApparentSideralTime.Negate());

            return(InstantaneousTerrestrial.Rotate(rZ).ToAstronomicForm <TAngular>(horizontalAngleRange));
        }
예제 #2
0
        public static Astronomical <T> HorizontalAngleToApparentPlace <T>(IAstronomical horizontalAngle, AngularUnit localApparentSideralTime)
            where T : AngularUnit, new()
        {
            ICartesian3D tempCoordinate = horizontalAngle.ToCartesian <Meter>();

            Matrix rZ = CalculateRotationMatrixAroundZ(localApparentSideralTime.Negate());

            Matrix reflection = CalculateReflectionMatrix();

            return(tempCoordinate.Rotate(rZ * reflection).ToAstronomicForm <T>(horizontalAngle.HorizontalAngleRange));
        }
예제 #3
0
        public static Cartesian3D <T> LocalGeodeticToLocalAstronomic <T>(ICartesian3D localGeodetic,
                                                                         AngularUnit deltaAzimuth,
                                                                         AngularUnit kessi,
                                                                         AngularUnit eta)
            where T : LinearUnit, new()
        {
            Matrix rZ = CalculateRotationMatrixAroundZ(deltaAzimuth.Negate());

            Matrix rY = CalculateRotationMatrixAroundY(kessi);

            Matrix rX = CalculateRotationMatrixAroundX(eta.Negate());

            return(localGeodetic.Rotate(rX * rY * rZ).ChangeTo <T>());
        }
예제 #4
0
        public static Cartesian3D <T> InstantaneousToAverage <T>(
            ICartesian3D instantaneousTerrestrial,
            AngularUnit poleX,
            AngularUnit poleY)
            where T : LinearUnit, new()
        {
            //check if instantaneous was not Right Handed!

            Matrix Rx = CalculateRotationMatrixAroundX(poleY.Negate());

            Matrix Ry = CalculateRotationMatrixAroundY(poleX.Negate());

            return(instantaneousTerrestrial.Rotate(Ry * Rx).ChangeTo <T>());
        }
예제 #5
0
        public static Astronomical <TAngular> OrbitalToApparentPlace <TAngular>(ICartesian3D orbital,
                                                                                AngularUnit rightAscensionOfAscendingNode,
                                                                                AngularUnit inclination,
                                                                                AngularUnit argumentOfPerigee,
                                                                                AngleRange horizontalAngleRange)
            where TAngular : AngularUnit, new()
        {
            Matrix firstRZ = CalculateRotationMatrixAroundZ(rightAscensionOfAscendingNode.Negate());

            Matrix rX = CalculateRotationMatrixAroundX(inclination.Negate());

            Matrix secondRZ = CalculateRotationMatrixAroundZ(argumentOfPerigee.Negate());

            return(orbital.Rotate(firstRZ * rX * secondRZ).ToAstronomicForm <TAngular>(horizontalAngleRange));
        }
예제 #6
0
        public static Cartesian3D <T> LocalAstronomicToLocalGeodetic <T>(ICartesian3D localAstronomic,
                                                                         AngularUnit initialAstronomicAzimuth,
                                                                         AngularUnit initialGeodeticAzimuth,
                                                                         AngularUnit kessi,
                                                                         AngularUnit eta)
            where T : LinearUnit, new()
        {
            Matrix rZ = CalculateRotationMatrixAroundZ(initialAstronomicAzimuth.Subtract(initialGeodeticAzimuth));

            Matrix rY = CalculateRotationMatrixAroundY(kessi.Negate());

            Matrix rX = CalculateRotationMatrixAroundX(eta);

            return(localAstronomic.Rotate(rZ * rY * rX).ChangeTo <T>());
        }