You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
168 lines
4.7 KiB
JavaScript
168 lines
4.7 KiB
JavaScript
import defined from "./defined.js";
|
|
import IauOrientationParameters from "./IauOrientationParameters.js";
|
|
import JulianDate from "./JulianDate.js";
|
|
import CesiumMath from "./Math.js";
|
|
import TimeConstants from "./TimeConstants.js";
|
|
|
|
/**
|
|
* This is a collection of the orientation information available for central bodies.
|
|
* The data comes from the Report of the IAU/IAG Working Group on Cartographic
|
|
* Coordinates and Rotational Elements: 2000.
|
|
*
|
|
* @namespace Iau2000Orientation
|
|
*
|
|
* @private
|
|
*/
|
|
var Iau2000Orientation = {};
|
|
|
|
var TdtMinusTai = 32.184;
|
|
var J2000d = 2451545.0;
|
|
|
|
var c1 = -0.0529921;
|
|
var c2 = -0.1059842;
|
|
var c3 = 13.0120009;
|
|
var c4 = 13.3407154;
|
|
var c5 = 0.9856003;
|
|
var c6 = 26.4057084;
|
|
var c7 = 13.064993;
|
|
var c8 = 0.3287146;
|
|
var c9 = 1.7484877;
|
|
var c10 = -0.1589763;
|
|
var c11 = 0.0036096;
|
|
var c12 = 0.1643573;
|
|
var c13 = 12.9590088;
|
|
var dateTT = new JulianDate();
|
|
|
|
/**
|
|
* Compute the orientation parameters for the Moon.
|
|
*
|
|
* @param {JulianDate} [date=JulianDate.now()] The date to evaluate the parameters.
|
|
* @param {IauOrientationParameters} [result] The object onto which to store the result.
|
|
* @returns {IauOrientationParameters} The modified result parameter or a new instance representing the orientation of the Earth's Moon.
|
|
* @private
|
|
*/
|
|
Iau2000Orientation.ComputeMoon = function (date, result) {
|
|
if (!defined(date)) {
|
|
date = JulianDate.now();
|
|
}
|
|
|
|
dateTT = JulianDate.addSeconds(date, TdtMinusTai, dateTT);
|
|
var d = JulianDate.totalDays(dateTT) - J2000d;
|
|
var T = d / TimeConstants.DAYS_PER_JULIAN_CENTURY;
|
|
|
|
var E1 = (125.045 + c1 * d) * CesiumMath.RADIANS_PER_DEGREE;
|
|
var E2 = (250.089 + c2 * d) * CesiumMath.RADIANS_PER_DEGREE;
|
|
var E3 = (260.008 + c3 * d) * CesiumMath.RADIANS_PER_DEGREE;
|
|
var E4 = (176.625 + c4 * d) * CesiumMath.RADIANS_PER_DEGREE;
|
|
var E5 = (357.529 + c5 * d) * CesiumMath.RADIANS_PER_DEGREE;
|
|
var E6 = (311.589 + c6 * d) * CesiumMath.RADIANS_PER_DEGREE;
|
|
var E7 = (134.963 + c7 * d) * CesiumMath.RADIANS_PER_DEGREE;
|
|
var E8 = (276.617 + c8 * d) * CesiumMath.RADIANS_PER_DEGREE;
|
|
var E9 = (34.226 + c9 * d) * CesiumMath.RADIANS_PER_DEGREE;
|
|
var E10 = (15.134 + c10 * d) * CesiumMath.RADIANS_PER_DEGREE;
|
|
var E11 = (119.743 + c11 * d) * CesiumMath.RADIANS_PER_DEGREE;
|
|
var E12 = (239.961 + c12 * d) * CesiumMath.RADIANS_PER_DEGREE;
|
|
var E13 = (25.053 + c13 * d) * CesiumMath.RADIANS_PER_DEGREE;
|
|
|
|
var sinE1 = Math.sin(E1);
|
|
var sinE2 = Math.sin(E2);
|
|
var sinE3 = Math.sin(E3);
|
|
var sinE4 = Math.sin(E4);
|
|
var sinE5 = Math.sin(E5);
|
|
var sinE6 = Math.sin(E6);
|
|
var sinE7 = Math.sin(E7);
|
|
var sinE8 = Math.sin(E8);
|
|
var sinE9 = Math.sin(E9);
|
|
var sinE10 = Math.sin(E10);
|
|
var sinE11 = Math.sin(E11);
|
|
var sinE12 = Math.sin(E12);
|
|
var sinE13 = Math.sin(E13);
|
|
|
|
var cosE1 = Math.cos(E1);
|
|
var cosE2 = Math.cos(E2);
|
|
var cosE3 = Math.cos(E3);
|
|
var cosE4 = Math.cos(E4);
|
|
var cosE5 = Math.cos(E5);
|
|
var cosE6 = Math.cos(E6);
|
|
var cosE7 = Math.cos(E7);
|
|
var cosE8 = Math.cos(E8);
|
|
var cosE9 = Math.cos(E9);
|
|
var cosE10 = Math.cos(E10);
|
|
var cosE11 = Math.cos(E11);
|
|
var cosE12 = Math.cos(E12);
|
|
var cosE13 = Math.cos(E13);
|
|
|
|
var rightAscension =
|
|
(269.9949 +
|
|
0.0031 * T -
|
|
3.8787 * sinE1 -
|
|
0.1204 * sinE2 +
|
|
0.07 * sinE3 -
|
|
0.0172 * sinE4 +
|
|
0.0072 * sinE6 -
|
|
0.0052 * sinE10 +
|
|
0.0043 * sinE13) *
|
|
CesiumMath.RADIANS_PER_DEGREE;
|
|
var declination =
|
|
(66.5392 +
|
|
0.013 * T +
|
|
1.5419 * cosE1 +
|
|
0.0239 * cosE2 -
|
|
0.0278 * cosE3 +
|
|
0.0068 * cosE4 -
|
|
0.0029 * cosE6 +
|
|
0.0009 * cosE7 +
|
|
0.0008 * cosE10 -
|
|
0.0009 * cosE13) *
|
|
CesiumMath.RADIANS_PER_DEGREE;
|
|
var rotation =
|
|
(38.3213 +
|
|
13.17635815 * d -
|
|
1.4e-12 * d * d +
|
|
3.561 * sinE1 +
|
|
0.1208 * sinE2 -
|
|
0.0642 * sinE3 +
|
|
0.0158 * sinE4 +
|
|
0.0252 * sinE5 -
|
|
0.0066 * sinE6 -
|
|
0.0047 * sinE7 -
|
|
0.0046 * sinE8 +
|
|
0.0028 * sinE9 +
|
|
0.0052 * sinE10 +
|
|
0.004 * sinE11 +
|
|
0.0019 * sinE12 -
|
|
0.0044 * sinE13) *
|
|
CesiumMath.RADIANS_PER_DEGREE;
|
|
|
|
var rotationRate =
|
|
((13.17635815 -
|
|
1.4e-12 * (2.0 * d) +
|
|
3.561 * cosE1 * c1 +
|
|
0.1208 * cosE2 * c2 -
|
|
0.0642 * cosE3 * c3 +
|
|
0.0158 * cosE4 * c4 +
|
|
0.0252 * cosE5 * c5 -
|
|
0.0066 * cosE6 * c6 -
|
|
0.0047 * cosE7 * c7 -
|
|
0.0046 * cosE8 * c8 +
|
|
0.0028 * cosE9 * c9 +
|
|
0.0052 * cosE10 * c10 +
|
|
0.004 * cosE11 * c11 +
|
|
0.0019 * cosE12 * c12 -
|
|
0.0044 * cosE13 * c13) /
|
|
86400.0) *
|
|
CesiumMath.RADIANS_PER_DEGREE;
|
|
|
|
if (!defined(result)) {
|
|
result = new IauOrientationParameters();
|
|
}
|
|
|
|
result.rightAscension = rightAscension;
|
|
result.declination = declination;
|
|
result.rotation = rotation;
|
|
result.rotationRate = rotationRate;
|
|
|
|
return result;
|
|
};
|
|
export default Iau2000Orientation;
|