| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 | import Cartesian3 from "./Cartesian3.js";import defined from "./defined.js";import Iau2000Orientation from "./Iau2000Orientation.js";import JulianDate from "./JulianDate.js";import CesiumMath from "./Math.js";import Matrix3 from "./Matrix3.js";import Quaternion from "./Quaternion.js";/** * The Axes representing the orientation of a Globe as represented by the data * from the IAU/IAG Working Group reports on rotational elements. * @alias IauOrientationAxes * @constructor * * @param {IauOrientationAxes.ComputeFunction} [computeFunction] The function that computes the {@link IauOrientationParameters} given a {@link JulianDate}. * * @see Iau2000Orientation * * @private */function IauOrientationAxes(computeFunction) {  if (!defined(computeFunction) || typeof computeFunction !== "function") {    computeFunction = Iau2000Orientation.ComputeMoon;  }  this._computeFunction = computeFunction;}const xAxisScratch = new Cartesian3();const yAxisScratch = new Cartesian3();const zAxisScratch = new Cartesian3();function computeRotationMatrix(alpha, delta, result) {  const xAxis = xAxisScratch;  xAxis.x = Math.cos(alpha + CesiumMath.PI_OVER_TWO);  xAxis.y = Math.sin(alpha + CesiumMath.PI_OVER_TWO);  xAxis.z = 0.0;  const cosDec = Math.cos(delta);  const zAxis = zAxisScratch;  zAxis.x = cosDec * Math.cos(alpha);  zAxis.y = cosDec * Math.sin(alpha);  zAxis.z = Math.sin(delta);  const yAxis = Cartesian3.cross(zAxis, xAxis, yAxisScratch);  if (!defined(result)) {    result = new Matrix3();  }  result[0] = xAxis.x;  result[1] = yAxis.x;  result[2] = zAxis.x;  result[3] = xAxis.y;  result[4] = yAxis.y;  result[5] = zAxis.y;  result[6] = xAxis.z;  result[7] = yAxis.z;  result[8] = zAxis.z;  return result;}const rotMtxScratch = new Matrix3();const quatScratch = new Quaternion();/** * Computes a rotation from ICRF to a Globe's Fixed axes. * * @param {JulianDate} date The date to evaluate the matrix. * @param {Matrix3} result The object onto which to store the result. * @returns {Matrix3} The modified result parameter or a new instance of the rotation from ICRF to Fixed. */IauOrientationAxes.prototype.evaluate = function (date, result) {  if (!defined(date)) {    date = JulianDate.now();  }  const alphaDeltaW = this._computeFunction(date);  const precMtx = computeRotationMatrix(    alphaDeltaW.rightAscension,    alphaDeltaW.declination,    result  );  const rot = CesiumMath.zeroToTwoPi(alphaDeltaW.rotation);  const quat = Quaternion.fromAxisAngle(Cartesian3.UNIT_Z, rot, quatScratch);  const rotMtx = Matrix3.fromQuaternion(    Quaternion.conjugate(quat, quat),    rotMtxScratch  );  const cbi2cbf = Matrix3.multiply(rotMtx, precMtx, precMtx);  return cbi2cbf;};/** * A function that computes the {@link IauOrientationParameters} for a {@link JulianDate}. * @callback IauOrientationAxes.ComputeFunction * @param {JulianDate} date The date to evaluate the parameters. * @returns {IauOrientationParameters} The orientation parameters. * @private */export default IauOrientationAxes;
 |