astronomy-bundle
Version:
Bundle for astronomical calculations such as position of moon, sun and planets, sunrise, sunset or solar eclipses. Most of the calculations are based on Jean Meeus 'Astronomical Algorithms' book and the VSOP87 theory.
59 lines (58 loc) • 3.15 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getAngularSeparation = exports.getAngularDiameter = exports.isWaxing = exports.getPositionAngleOfBrightLimb = exports.getIlluminatedFraction = exports.getPhaseAngle = exports.getElongation = void 0;
const angleCalc_1 = require("./angleCalc");
function getElongation(equCoordsObj, equCoordsSun) {
const raObjRad = (0, angleCalc_1.deg2rad)(equCoordsObj.rightAscension);
const dObjRad = (0, angleCalc_1.deg2rad)(equCoordsObj.declination);
const raSunRad = (0, angleCalc_1.deg2rad)(equCoordsSun.rightAscension);
const dSunRad = (0, angleCalc_1.deg2rad)(equCoordsSun.declination);
const phiRad = Math.acos(Math.sin(dSunRad) * Math.sin(dObjRad) + Math.cos(dSunRad) * Math.cos(dObjRad) * Math.cos(raSunRad - raObjRad));
return (0, angleCalc_1.rad2deg)(phiRad);
}
exports.getElongation = getElongation;
function getPhaseAngle(equCoordsObj, equCoordsSun) {
const distObj = equCoordsObj.radiusVector;
const distSun = equCoordsSun.radiusVector;
const phi = getElongation(equCoordsObj, equCoordsSun);
const phiRad = (0, angleCalc_1.deg2rad)(phi);
const i = Math.atan2(distSun * Math.sin(phiRad), distObj - distSun * Math.cos(phiRad));
return (0, angleCalc_1.rad2deg)(i);
}
exports.getPhaseAngle = getPhaseAngle;
function getIlluminatedFraction(phaseAngle) {
const iRad = (0, angleCalc_1.deg2rad)(phaseAngle);
return (1 + Math.cos(iRad)) / 2;
}
exports.getIlluminatedFraction = getIlluminatedFraction;
function getPositionAngleOfBrightLimb(equCoordsObj, equCoordsSun) {
const raObjRad = (0, angleCalc_1.deg2rad)(equCoordsObj.rightAscension);
const dObjRad = (0, angleCalc_1.deg2rad)(equCoordsObj.declination);
const raSunRad = (0, angleCalc_1.deg2rad)(equCoordsSun.rightAscension);
const dSunRad = (0, angleCalc_1.deg2rad)(equCoordsSun.declination);
const numerator = Math.cos(dSunRad) * Math.sin(raSunRad - raObjRad);
const denominator = Math.sin(dSunRad) * Math.cos(dObjRad)
- Math.cos(dSunRad) * Math.sin(dObjRad) * Math.cos(raSunRad - raObjRad);
const chiRad = Math.atan2(numerator, denominator);
return (0, angleCalc_1.normalizeAngle)((0, angleCalc_1.rad2deg)(chiRad));
}
exports.getPositionAngleOfBrightLimb = getPositionAngleOfBrightLimb;
function isWaxing(chi) {
return chi >= 180;
}
exports.isWaxing = isWaxing;
function getAngularDiameter(distance, trueDiameter) {
const delta = 2 * Math.atan2(trueDiameter, 2 * distance);
return (0, angleCalc_1.rad2deg)(delta);
}
exports.getAngularDiameter = getAngularDiameter;
function getAngularSeparation(coords1, coords2) {
const raRad1 = (0, angleCalc_1.deg2rad)(coords1.rightAscension);
const dRad1 = (0, angleCalc_1.deg2rad)(coords1.declination);
const raRad2 = (0, angleCalc_1.deg2rad)(coords2.rightAscension);
const dRad2 = (0, angleCalc_1.deg2rad)(coords2.declination);
const dRad = Math.acos(Math.sin(dRad1) * Math.sin(dRad2)
+ Math.cos(dRad1) * Math.cos(dRad2) * Math.cos(raRad1 - raRad2));
return (0, angleCalc_1.rad2deg)(dRad);
}
exports.getAngularSeparation = getAngularSeparation;