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.
116 lines (115 loc) • 5.8 kB
JavaScript
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const lightSpeed_1 = require("../constants/lightSpeed");
const apparentCoordinateCalc_1 = require("../coordinates/calculations/apparentCoordinateCalc");
const coordinateCalc_1 = require("../coordinates/calculations/coordinateCalc");
const conjunctionCalc_1 = require("../planets/calculations/conjunctionCalc");
const time_1 = require("../time");
const distanceCalc_1 = require("../utils/distanceCalc");
class AstronomicalObject {
constructor(toi = time_1.createTimeOfInterest.fromCurrentTime(), name = 'astronomical object') {
this.toi = toi;
this.name = name;
this.jd = 0.0;
this.jd0 = 0.0;
this.T = 0.0;
this.t = 0.0;
this.jd = toi.getJulianDay();
this.jd0 = toi.getJulianDay0();
this.T = toi.getJulianCenturiesJ2000();
this.t = toi.getJulianMillenniaJ2000();
}
getTimeOfInterest() {
return this.toi;
}
getGeocentricEquatorialSphericalJ2000Coordinates() {
return __awaiter(this, void 0, void 0, function* () {
const coords = yield this.getGeocentricEclipticSphericalJ2000Coordinates();
return (0, coordinateCalc_1.eclipticSpherical2equatorialSpherical)(coords, this.T);
});
}
getGeocentricEquatorialSphericalDateCoordinates() {
return __awaiter(this, void 0, void 0, function* () {
const coords = yield this.getGeocentricEclipticSphericalDateCoordinates();
return (0, coordinateCalc_1.eclipticSpherical2equatorialSpherical)(coords, this.T);
});
}
getApparentGeocentricEclipticRectangularCoordinates() {
return __awaiter(this, void 0, void 0, function* () {
const coords = yield this.getApparentGeocentricEclipticSphericalCoordinates();
return (0, coordinateCalc_1.spherical2rectangular)(coords);
});
}
getApparentGeocentricEquatorialSphericalCoordinates() {
return __awaiter(this, void 0, void 0, function* () {
const coords = yield this.getApparentGeocentricEclipticSphericalCoordinates();
return (0, coordinateCalc_1.eclipticSpherical2equatorialSpherical)(coords, this.T);
});
}
getTopocentricEquatorialSphericalCoordinates(location) {
return __awaiter(this, void 0, void 0, function* () {
const coords = yield this.getApparentGeocentricEquatorialSphericalCoordinates();
return (0, coordinateCalc_1.equatorialSpherical2topocentricSpherical)(coords, location, this.T);
});
}
getTopocentricHorizontalCoordinates(location) {
return __awaiter(this, void 0, void 0, function* () {
const coords = yield this.getApparentGeocentricEquatorialSphericalCoordinates();
return (0, coordinateCalc_1.equatorialSpherical2topocentricHorizontal)(coords, location, this.T);
});
}
getApparentTopocentricHorizontalCoordinates(location) {
return __awaiter(this, void 0, void 0, function* () {
const { azimuth, altitude, radiusVector } = yield this.getTopocentricHorizontalCoordinates(location);
return {
azimuth: azimuth,
altitude: (0, apparentCoordinateCalc_1.correctEffectOfRefraction)(altitude),
radiusVector: radiusVector,
};
});
}
getDistanceToEarth() {
return __awaiter(this, void 0, void 0, function* () {
const coords = yield this.getGeocentricEclipticSphericalDateCoordinates();
return (0, distanceCalc_1.au2km)(coords.radiusVector);
});
}
getApparentDistanceToEarth() {
return __awaiter(this, void 0, void 0, function* () {
const coords = yield this.getApparentGeocentricEclipticSphericalCoordinates();
return (0, distanceCalc_1.au2km)(coords.radiusVector);
});
}
getTopocentricDistanceToEarth(location) {
return __awaiter(this, void 0, void 0, function* () {
const coords = yield this.getTopocentricEquatorialSphericalCoordinates(location);
return (0, distanceCalc_1.au2km)(coords.radiusVector);
});
}
getLightTime() {
return __awaiter(this, void 0, void 0, function* () {
const { radiusVector } = yield this.getGeocentricEclipticSphericalDateCoordinates();
return (0, distanceCalc_1.au2km)(radiusVector) / lightSpeed_1.LIGHT_SPEED_KM_PER_SEC;
});
}
getConjunctionInRightAscensionTo(astronomicalObjectConstructor) {
return __awaiter(this, void 0, void 0, function* () {
return yield (0, conjunctionCalc_1.getConjunctionInRightAscension)(this.constructor, astronomicalObjectConstructor, this.jd0);
});
}
getConjunctionInLongitudeTo(astronomicalObjectConstructor) {
return __awaiter(this, void 0, void 0, function* () {
return yield (0, conjunctionCalc_1.getConjunctionInLongitude)(this.constructor, astronomicalObjectConstructor, this.jd0);
});
}
}
exports.default = AstronomicalObject;