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)); }
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)); }
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>()); }
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>()); }
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)); }
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>()); }