@essrt/physics 21.0.0 → 22.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -2
- package/src/climate/l1-orbital.cjs +3 -1
- package/src/constants/coefficients.d.ts +1 -1
- package/src/constants/coefficients.js +2 -1
- package/src/constants/generated.d.ts +16 -150
- package/src/constants/generated.js +30 -161
- package/src/earth/frame-of-date.cjs +25 -1
- package/src/index.js +6 -2
- package/src/model.js +18 -15
- package/src/moon/series.cjs +5 -5
- package/src/planets/chain-artifact.js +2 -2
- package/src/planets/display-names.cjs +30 -0
- package/src/planets/geometry.cjs +29 -8
- package/src/planets/model.cjs +7 -6
- package/src/planets/spin-channel.cjs +46 -2
- package/types/climate/l1-orbital.d.cts +3 -1
- package/types/constants/coefficients.d.ts +1 -1
- package/types/constants/generated.d.ts +16 -150
- package/types/earth/frame-of-date.d.cts +9 -0
- package/types/index.d.ts +2 -1
- package/types/model.d.ts +2 -0
- package/types/moon/series.d.cts +0 -2
- package/types/planets/display-names.d.cts +2 -0
- package/types/planets/geometry.d.cts +9 -2
- package/types/planets/model.d.cts +0 -5
- package/types/planets/spin-channel.d.cts +4 -0
package/src/planets/model.cjs
CHANGED
|
@@ -7,8 +7,9 @@
|
|
|
7
7
|
* inputs the chain's g-mode beat (wobble) and the spin channel's
|
|
8
8
|
* derived J2000 obliquity, carried on the record since plan 06
|
|
9
9
|
* Phase 7 commit 2
|
|
10
|
-
* geometry (the
|
|
11
|
-
*
|
|
10
|
+
* geometry (the ellipse family — geometry.cjs's own taxonomy since
|
|
11
|
+
* plan 11 step 3 — on the OBSERVED J2000 eccentricity; minor
|
|
12
|
+
* bodies use their record's base)
|
|
12
13
|
*
|
|
13
14
|
* The ψ and K amplitude laws that opened this chain (ψ constant →
|
|
14
15
|
* inclination amplitude/mean; K constant → eccentricity amplitude/base/
|
|
@@ -35,7 +36,6 @@ const { derivePlanetGeometry, scaffoldOrbitInputs } = require('./geometry.cjs');
|
|
|
35
36
|
|
|
36
37
|
/**
|
|
37
38
|
* @typedef {Object} PlanetModelBody
|
|
38
|
-
* @property {string} [type] - geometry type branch ('I' | 'II' | 'III')
|
|
39
39
|
* @property {number} solarYearInput - the observed sidereal period input, SI days (the scaffold period of the no-chain bodies; the chain planets ride the artifact's elements)
|
|
40
40
|
* @property {number} [invPlaneInclinationJ2000]
|
|
41
41
|
* @property {number} [longitudePerihelion]
|
|
@@ -108,11 +108,12 @@ function createPlanetModel(env, bodies) {
|
|
|
108
108
|
// eccentricityPhaseJ2000Deg stood here. With the law gone, the ellipse
|
|
109
109
|
// geometry below reads the OBSERVED J2000 eccentricity where it used to
|
|
110
110
|
// read the law's System-Reset base — the observation the chain is
|
|
111
|
-
// anchored on, not a construction. The
|
|
112
|
-
//
|
|
111
|
+
// anchored on, not a construction. The additional bodies' base is their
|
|
112
|
+
// observed J2000 eccentricity too (astro-reference additionalBodiesReference;
|
|
113
|
+
// plan 11 step 2 deleted the stored copy).
|
|
113
114
|
|
|
114
115
|
rec.geometry = derivePlanetGeometry({
|
|
115
|
-
key,
|
|
116
|
+
key, // the ellipse family is the law's own taxonomy (geometry.cjs SCAFFOLD_ELLIPSE_FAMILY, plan 11 step 3)
|
|
116
117
|
// plan 09 step 7b: the chain's J2000 elements where the artifact has the body, else the observed period input
|
|
117
118
|
...scaffoldOrbitInputs(key, env.chainArtifact, b.solarYearInput),
|
|
118
119
|
orbitalEccentricityBase: b.orbitalEccentricityBase !== undefined
|
|
@@ -46,6 +46,16 @@
|
|
|
46
46
|
* `computeObliquityJ2000Deg`), and — through the chain's own g-mode beat
|
|
47
47
|
* (keplerian-chain `computeSecularShape`) — the "wobble period" the K
|
|
48
48
|
* device beat from its integer axial and obliquity fractions.
|
|
49
|
+
*
|
|
50
|
+
* Since plan 11 step 3 the channel also serves the POLE of date itself —
|
|
51
|
+
* `spinAxisEclipticJ2000AtYear` (the integrated ŝ(t), angular-momentum
|
|
52
|
+
* sense) beside `orbitNormalEclipticJ2000AtYear` (n̂(t)) — so both scene
|
|
53
|
+
* twins place each planet's rotation axis in world through the frame bridge
|
|
54
|
+
* exactly as Earth's axis is placed (R4): the pole's azimuth used to ride the
|
|
55
|
+
* retired scaffold's start angle (one turn of the pole per orbit), only its
|
|
56
|
+
* tilt magnitude was read from here. Mercury's Cassini-locked pole is the
|
|
57
|
+
* J2000 pole carried with its orbit normal (the minimal rotation n̂₀ → n̂(t)),
|
|
58
|
+
* the lock's constant obliquity.
|
|
49
59
|
*/
|
|
50
60
|
|
|
51
61
|
'use strict';
|
|
@@ -124,6 +134,19 @@ const dot = (a, b) => a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
|
|
124
134
|
const unit = (a) => { const r = Math.hypot(a[0], a[1], a[2]); return [a[0] / r, a[1] / r, a[2] / r]; };
|
|
125
135
|
/** @param {number[]} a @param {number[]} b */
|
|
126
136
|
const angleDeg = (a, b) => Math.acos(Math.max(-1, Math.min(1, dot(a, b)))) * R2D;
|
|
137
|
+
/**
|
|
138
|
+
* v carried by the minimal rotation that takes unit a onto unit b (Rodrigues
|
|
139
|
+
* about a × b); v itself when a and b coincide.
|
|
140
|
+
* @param {number[]} a @param {number[]} b @param {number[]} v
|
|
141
|
+
*/
|
|
142
|
+
const rotateAligned = (a, b, v) => {
|
|
143
|
+
const k = cross(a, b);
|
|
144
|
+
const s = Math.hypot(k[0], k[1], k[2]), c = dot(a, b);
|
|
145
|
+
if (s < 1e-15) return v.slice();
|
|
146
|
+
const kh = [k[0] / s, k[1] / s, k[2] / s];
|
|
147
|
+
const kv = cross(kh, v), kd = dot(kh, v) * (1 - c);
|
|
148
|
+
return [v[0] * c + kv[0] * s + kh[0] * kd, v[1] * c + kv[1] * s + kh[1] * kd, v[2] * c + kv[2] * s + kh[2] * kd];
|
|
149
|
+
};
|
|
127
150
|
|
|
128
151
|
/**
|
|
129
152
|
* The IAU pole (ICRF equatorial RA/Dec) as an ecliptic-J2000 unit vector.
|
|
@@ -272,9 +295,9 @@ function createPlanetSpinChannel(deps) {
|
|
|
272
295
|
const stepYr = deps.stepYr ?? (cassiniLocked ? STEP_MAX_YR
|
|
273
296
|
: Math.min(STEP_MAX_YR, Math.max(STEP_MIN_YR, axialPrecessionPeriodYearsJ2000 / STEPS_PER_PRECESSION_PERIOD)));
|
|
274
297
|
// append-only trajectories from J2000, one per direction: sample i sits at t = sign · i · step
|
|
275
|
-
/** @typedef {{ eps: number[], last: number[] }} Track */
|
|
298
|
+
/** @typedef {{ eps: number[], sv: number[][], last: number[] }} Track — the obliquity and the unit spin vector per sample */
|
|
276
299
|
/** @returns {Track} */
|
|
277
|
-
const mkTrack = () => ({ eps: [obliquityJ2000], last: s0.slice() });
|
|
300
|
+
const mkTrack = () => ({ eps: [obliquityJ2000], sv: [s0.slice()], last: s0.slice() });
|
|
278
301
|
const fwd = mkTrack(), bwd = mkTrack();
|
|
279
302
|
/** @param {Track} tr @param {number} sign @param {number} count */
|
|
280
303
|
const grow = (tr, sign, count) => {
|
|
@@ -284,6 +307,7 @@ function createPlanetSpinChannel(deps) {
|
|
|
284
307
|
const h = sign * stepYr;
|
|
285
308
|
const s = rk4(tr.last, t, h);
|
|
286
309
|
tr.eps.push(angleDeg(s, orbitNormalAt(t + h)));
|
|
310
|
+
tr.sv.push(s);
|
|
287
311
|
tr.last = s;
|
|
288
312
|
}
|
|
289
313
|
};
|
|
@@ -333,6 +357,24 @@ function createPlanetSpinChannel(deps) {
|
|
|
333
357
|
}
|
|
334
358
|
return { minDeg: mn, meanDeg: sum / cnt, maxDeg: mx };
|
|
335
359
|
};
|
|
360
|
+
/** the planet's orbit normal of date n̂(t), a unit vector in the J2000 ecliptic (the ζ table at the chain's anchor) @param {number} year */
|
|
361
|
+
const orbitNormalEclipticJ2000AtYear = (year) => orbitNormalAt(year - 2000);
|
|
362
|
+
/**
|
|
363
|
+
* the spin axis of date ŝ(t), a unit vector in the J2000 ecliptic in the
|
|
364
|
+
* angular-momentum sense (Venus and Uranus point south of their orbits):
|
|
365
|
+
* the integrated pole, interpolated linearly between the track's samples
|
|
366
|
+
* and renormalized (≤ 1.2° of pole motion per sample — the chord error is
|
|
367
|
+
* arcsecond-class, below what any renderer resolves); Mercury (Cassini
|
|
368
|
+
* lock) carries the J2000 pole with its orbit normal; null beyond ±10 Myr
|
|
369
|
+
* @param {number} year
|
|
370
|
+
*/
|
|
371
|
+
const spinAxisEclipticJ2000AtYear = (year) => {
|
|
372
|
+
if (cassiniLocked) return rotateAligned(n0, orbitNormalAt(year - 2000), s0);
|
|
373
|
+
const b = bracket(year - 2000);
|
|
374
|
+
if (!b) return null;
|
|
375
|
+
const a = b.tr.sv[b.i], c = b.tr.sv[b.i + 1];
|
|
376
|
+
return unit([a[0] + b.f * (c[0] - a[0]), a[1] + b.f * (c[1] - a[1]), a[2] + b.f * (c[2] - a[2])]);
|
|
377
|
+
};
|
|
336
378
|
|
|
337
379
|
return Object.freeze({
|
|
338
380
|
key,
|
|
@@ -350,6 +392,8 @@ function createPlanetSpinChannel(deps) {
|
|
|
350
392
|
obliquityDegAtYear,
|
|
351
393
|
spinPrecessionRateArcsecPerYrAtYear,
|
|
352
394
|
obliquityEnvelopeDeg,
|
|
395
|
+
spinAxisEclipticJ2000AtYear,
|
|
396
|
+
orbitNormalEclipticJ2000AtYear,
|
|
353
397
|
stepYr,
|
|
354
398
|
maxSpanYr: MAX_SPAN_YR,
|
|
355
399
|
});
|
|
@@ -73,7 +73,9 @@ export function laggedL1Terms(l1Terms: Array<{
|
|
|
73
73
|
* j2RateJ2000PerYr?: number,
|
|
74
74
|
* j2J2000?: number,
|
|
75
75
|
* }} cfg - relaxationKyr, alphaGiaRateJ2000PerYr and j2RateJ2000PerYr are
|
|
76
|
-
*
|
|
76
|
+
* assembled deepTime block (DEFAULT_CONSTANTS.deepTime: τ the banked record
|
|
77
|
+
* data/deep-time-fitted.json, the rate derived from astro-reference
|
|
78
|
+
* giaCoxChaoPeltier — plan 11 step 1); alphaJ2000 the IERS
|
|
77
79
|
* moment-of-inertia factor; j2J2000 Earth's J₂ (astro-reference)
|
|
78
80
|
* @returns {{
|
|
79
81
|
* alphaAt: (year: number) => number,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// GENERATED — do not edit. Regenerate: node tools/constants/generate.mjs --write
|
|
2
2
|
// The fitted coefficients' shapes for TypeScript consumers (§2g); values live
|
|
3
|
-
// in coefficients.js, emitted VERBATIM from
|
|
3
|
+
// in coefficients.js, emitted VERBATIM from the fit artifacts under data/.
|
|
4
4
|
|
|
5
5
|
export declare const COEFFICIENTS_HASH: "91e2d041c7b6e038";
|
|
6
6
|
|
|
@@ -2,56 +2,14 @@
|
|
|
2
2
|
// Gives the TypeScript website full type safety at the boundary (§2g) while
|
|
3
3
|
// packages/physics stays JavaScript.
|
|
4
4
|
|
|
5
|
-
export declare const CONSTANTS_HASH: "
|
|
5
|
+
export declare const CONSTANTS_HASH: "f4f43386df2781b8";
|
|
6
6
|
|
|
7
7
|
export declare const MODEL_VERSION: string;
|
|
8
8
|
|
|
9
9
|
export declare const PREPRINT_DOI: string;
|
|
10
10
|
|
|
11
11
|
export declare const DEFAULT_CONSTANTS: {
|
|
12
|
-
readonly hash: "
|
|
13
|
-
readonly additionalBodies: {
|
|
14
|
-
"pluto": {
|
|
15
|
-
"name": string;
|
|
16
|
-
"orbitalEccentricityBase": number;
|
|
17
|
-
"type": string;
|
|
18
|
-
"angleCorrection": number;
|
|
19
|
-
"startpos": number;
|
|
20
|
-
"ascendingNodeInvPlane": number;
|
|
21
|
-
"invPlaneInclinationMean": number;
|
|
22
|
-
"invPlaneInclinationAmplitude": number;
|
|
23
|
-
};
|
|
24
|
-
"halleys": {
|
|
25
|
-
"name": string;
|
|
26
|
-
"orbitalEccentricityBase": number;
|
|
27
|
-
"type": string;
|
|
28
|
-
"angleCorrection": number;
|
|
29
|
-
"startpos": number;
|
|
30
|
-
"ascendingNodeInvPlane": number;
|
|
31
|
-
"invPlaneInclinationMean": number;
|
|
32
|
-
"invPlaneInclinationAmplitude": number;
|
|
33
|
-
};
|
|
34
|
-
"eros": {
|
|
35
|
-
"name": string;
|
|
36
|
-
"orbitalEccentricityBase": number;
|
|
37
|
-
"type": string;
|
|
38
|
-
"angleCorrection": number;
|
|
39
|
-
"startpos": number;
|
|
40
|
-
"ascendingNodeInvPlane": number;
|
|
41
|
-
"invPlaneInclinationMean": number;
|
|
42
|
-
"invPlaneInclinationAmplitude": number;
|
|
43
|
-
};
|
|
44
|
-
"ceres": {
|
|
45
|
-
"name": string;
|
|
46
|
-
"orbitalEccentricityBase": number;
|
|
47
|
-
"orbitDistanceOverride": number;
|
|
48
|
-
"angleCorrection": number;
|
|
49
|
-
"startpos": number;
|
|
50
|
-
"ascendingNodeInvPlane": number;
|
|
51
|
-
"invPlaneInclinationMean": number;
|
|
52
|
-
"invPlaneInclinationAmplitude": number;
|
|
53
|
-
};
|
|
54
|
-
};
|
|
12
|
+
readonly hash: "f4f43386df2781b8";
|
|
55
13
|
readonly additionalBodiesReference: {
|
|
56
14
|
"pluto": {
|
|
57
15
|
"solarYearInput": number;
|
|
@@ -64,6 +22,7 @@ export declare const DEFAULT_CONSTANTS: {
|
|
|
64
22
|
"meanAnomaly": number;
|
|
65
23
|
"trueAnomaly": number;
|
|
66
24
|
"rotationPeriodDays": number;
|
|
25
|
+
"ascendingNodeInvPlaneClosedForm": number;
|
|
67
26
|
};
|
|
68
27
|
"halleys": {
|
|
69
28
|
"solarYearInput": number;
|
|
@@ -143,21 +102,6 @@ export declare const DEFAULT_CONSTANTS: {
|
|
|
143
102
|
"thermalPumpFactor": number;
|
|
144
103
|
};
|
|
145
104
|
};
|
|
146
|
-
readonly earth: {
|
|
147
|
-
"earthtiltMean": number;
|
|
148
|
-
"earthInvPlaneInclinationAmplitude": number;
|
|
149
|
-
"eccentricityBase": number;
|
|
150
|
-
"eccentricityAmplitude": number;
|
|
151
|
-
"kDeviceInclinationPhaseJ2000Deg": number;
|
|
152
|
-
"kDeviceWheelPeriodYears": {
|
|
153
|
-
"3": number;
|
|
154
|
-
"5": number;
|
|
155
|
-
"8": number;
|
|
156
|
-
"13": number;
|
|
157
|
-
"16": number;
|
|
158
|
-
};
|
|
159
|
-
"kDeviceWheelPhaseAtJ2000Cycles": number;
|
|
160
|
-
};
|
|
161
105
|
readonly earthOrbital: {
|
|
162
106
|
"j2000EpochYear": number;
|
|
163
107
|
"perihelionalignmentYear": number;
|
|
@@ -177,19 +121,9 @@ export declare const DEFAULT_CONSTANTS: {
|
|
|
177
121
|
"deltaTStart": number;
|
|
178
122
|
"sunTilt": number;
|
|
179
123
|
};
|
|
180
|
-
readonly
|
|
181
|
-
"
|
|
182
|
-
"
|
|
183
|
-
"correctionDays": number;
|
|
184
|
-
"correctionSun": number;
|
|
185
|
-
"startAngleModel": number;
|
|
186
|
-
"useVariableSpeed": boolean;
|
|
187
|
-
};
|
|
188
|
-
readonly moon: {
|
|
189
|
-
"moonStartposApsidal": number;
|
|
190
|
-
"moonStartposNodal": number;
|
|
191
|
-
"moonStartposMoon": number;
|
|
192
|
-
"moonMeeusLpCorrection": number;
|
|
124
|
+
readonly giaCoxChaoPeltier: {
|
|
125
|
+
"dJ2DtPerYr": number;
|
|
126
|
+
"j2ToAlphaFactor": number;
|
|
193
127
|
};
|
|
194
128
|
readonly moonMeeus: {
|
|
195
129
|
"elpW1T2Decomposition_arcsecPerCy2": {
|
|
@@ -216,21 +150,13 @@ export declare const DEFAULT_CONSTANTS: {
|
|
|
216
150
|
"moonApsidalPrecessionDaysInputICRF": number;
|
|
217
151
|
"moonNodalPrecessionDaysInputICRF": number;
|
|
218
152
|
"moonDistance": number;
|
|
153
|
+
"moonRecessionAlpha1PerMa": number;
|
|
219
154
|
"moonEclipticInclinationJ2000": number;
|
|
220
155
|
"moonInclinationConstantBrownELP": number;
|
|
221
156
|
"moonOrbitalEccentricityBase": number;
|
|
222
157
|
"moonObliquityEclipticJ2000": number;
|
|
223
158
|
"moonTilt": number;
|
|
224
159
|
};
|
|
225
|
-
readonly perihelionPassageRef: {
|
|
226
|
-
"mercury": number;
|
|
227
|
-
"venus": number;
|
|
228
|
-
"mars": number;
|
|
229
|
-
"jupiter": number;
|
|
230
|
-
"saturn": number;
|
|
231
|
-
"uranus": number;
|
|
232
|
-
"neptune": number;
|
|
233
|
-
};
|
|
234
160
|
readonly physicalConstants: {
|
|
235
161
|
"currentAUDistance": number;
|
|
236
162
|
"G_CONSTANT": number;
|
|
@@ -295,6 +221,7 @@ export declare const DEFAULT_CONSTANTS: {
|
|
|
295
221
|
"invPlaneInclinationJ2000": number;
|
|
296
222
|
"meanAnomaly": number;
|
|
297
223
|
"trueAnomaly": number;
|
|
224
|
+
"ascendingNodeInvPlaneClosedForm": number;
|
|
298
225
|
};
|
|
299
226
|
"venus": {
|
|
300
227
|
"solarYearInput": number;
|
|
@@ -307,6 +234,7 @@ export declare const DEFAULT_CONSTANTS: {
|
|
|
307
234
|
"meanAnomaly": number;
|
|
308
235
|
"trueAnomaly": number;
|
|
309
236
|
"rotationPeriodDays": number;
|
|
237
|
+
"ascendingNodeInvPlaneClosedForm": number;
|
|
310
238
|
};
|
|
311
239
|
"mars": {
|
|
312
240
|
"solarYearInput": number;
|
|
@@ -319,6 +247,7 @@ export declare const DEFAULT_CONSTANTS: {
|
|
|
319
247
|
"meanAnomaly": number;
|
|
320
248
|
"trueAnomaly": number;
|
|
321
249
|
"rotationPeriodDays": number;
|
|
250
|
+
"ascendingNodeInvPlaneClosedForm": number;
|
|
322
251
|
};
|
|
323
252
|
"jupiter": {
|
|
324
253
|
"solarYearInput": number;
|
|
@@ -331,6 +260,7 @@ export declare const DEFAULT_CONSTANTS: {
|
|
|
331
260
|
"meanAnomaly": number;
|
|
332
261
|
"trueAnomaly": number;
|
|
333
262
|
"rotationPeriodDays": number;
|
|
263
|
+
"ascendingNodeInvPlaneClosedForm": number;
|
|
334
264
|
};
|
|
335
265
|
"saturn": {
|
|
336
266
|
"solarYearInput": number;
|
|
@@ -343,6 +273,7 @@ export declare const DEFAULT_CONSTANTS: {
|
|
|
343
273
|
"meanAnomaly": number;
|
|
344
274
|
"trueAnomaly": number;
|
|
345
275
|
"rotationPeriodDays": number;
|
|
276
|
+
"ascendingNodeInvPlaneClosedForm": number;
|
|
346
277
|
};
|
|
347
278
|
"uranus": {
|
|
348
279
|
"solarYearInput": number;
|
|
@@ -355,6 +286,7 @@ export declare const DEFAULT_CONSTANTS: {
|
|
|
355
286
|
"meanAnomaly": number;
|
|
356
287
|
"trueAnomaly": number;
|
|
357
288
|
"rotationPeriodDays": number;
|
|
289
|
+
"ascendingNodeInvPlaneClosedForm": number;
|
|
358
290
|
};
|
|
359
291
|
"neptune": {
|
|
360
292
|
"solarYearInput": number;
|
|
@@ -367,6 +299,7 @@ export declare const DEFAULT_CONSTANTS: {
|
|
|
367
299
|
"meanAnomaly": number;
|
|
368
300
|
"trueAnomaly": number;
|
|
369
301
|
"rotationPeriodDays": number;
|
|
302
|
+
"ascendingNodeInvPlaneClosedForm": number;
|
|
370
303
|
};
|
|
371
304
|
};
|
|
372
305
|
readonly planetSpinPhysical: {
|
|
@@ -476,72 +409,9 @@ export declare const DEFAULT_CONSTANTS: {
|
|
|
476
409
|
}>;
|
|
477
410
|
};
|
|
478
411
|
};
|
|
479
|
-
readonly planets: {
|
|
480
|
-
"mercury": {
|
|
481
|
-
"name": string;
|
|
482
|
-
"eocFraction": number;
|
|
483
|
-
"startpos": number;
|
|
484
|
-
"angleCorrection": number;
|
|
485
|
-
"type": string;
|
|
486
|
-
"mirrorPair": string;
|
|
487
|
-
"ascendingNodeInvPlane": number;
|
|
488
|
-
};
|
|
489
|
-
"venus": {
|
|
490
|
-
"name": string;
|
|
491
|
-
"eocFraction": number;
|
|
492
|
-
"startpos": number;
|
|
493
|
-
"angleCorrection": number;
|
|
494
|
-
"type": string;
|
|
495
|
-
"mirrorPair": string;
|
|
496
|
-
"ascendingNodeInvPlane": number;
|
|
497
|
-
};
|
|
498
|
-
"mars": {
|
|
499
|
-
"name": string;
|
|
500
|
-
"eocFraction": number;
|
|
501
|
-
"startpos": number;
|
|
502
|
-
"angleCorrection": number;
|
|
503
|
-
"type": string;
|
|
504
|
-
"mirrorPair": string;
|
|
505
|
-
"ascendingNodeInvPlane": number;
|
|
506
|
-
};
|
|
507
|
-
"jupiter": {
|
|
508
|
-
"name": string;
|
|
509
|
-
"eocFraction": number;
|
|
510
|
-
"startpos": number;
|
|
511
|
-
"angleCorrection": number;
|
|
512
|
-
"type": string;
|
|
513
|
-
"mirrorPair": string;
|
|
514
|
-
"ascendingNodeInvPlane": number;
|
|
515
|
-
};
|
|
516
|
-
"saturn": {
|
|
517
|
-
"name": string;
|
|
518
|
-
"eocFraction": number;
|
|
519
|
-
"startpos": number;
|
|
520
|
-
"angleCorrection": number;
|
|
521
|
-
"type": string;
|
|
522
|
-
"mirrorPair": string;
|
|
523
|
-
"ascendingNodeInvPlane": number;
|
|
524
|
-
};
|
|
525
|
-
"uranus": {
|
|
526
|
-
"name": string;
|
|
527
|
-
"eocFraction": number;
|
|
528
|
-
"startpos": number;
|
|
529
|
-
"angleCorrection": number;
|
|
530
|
-
"type": string;
|
|
531
|
-
"mirrorPair": string;
|
|
532
|
-
"ascendingNodeInvPlane": number;
|
|
533
|
-
};
|
|
534
|
-
"neptune": {
|
|
535
|
-
"name": string;
|
|
536
|
-
"eocFraction": number;
|
|
537
|
-
"startpos": number;
|
|
538
|
-
"angleCorrection": number;
|
|
539
|
-
"type": string;
|
|
540
|
-
"mirrorPair": string;
|
|
541
|
-
"ascendingNodeInvPlane": number;
|
|
542
|
-
};
|
|
543
|
-
};
|
|
544
412
|
readonly timeReference: {
|
|
413
|
+
"sceneEpochJD": number;
|
|
414
|
+
"sceneEpochYear": number;
|
|
545
415
|
"j2000JD": number;
|
|
546
416
|
"julianCenturyDays": number;
|
|
547
417
|
"gregorianStartJD": number;
|
|
@@ -598,10 +468,6 @@ export declare const REFERENCE_DATA: {
|
|
|
598
468
|
"greatattractorDistance": number;
|
|
599
469
|
"milkywaySpeed": number;
|
|
600
470
|
};
|
|
601
|
-
readonly giaCoxChaoPeltier: {
|
|
602
|
-
"dJ2DtPerYr": number;
|
|
603
|
-
"j2ToAlphaFactor": number;
|
|
604
|
-
};
|
|
605
471
|
readonly jplEclipticInclinationTrends: {
|
|
606
472
|
"mercury": number;
|
|
607
473
|
"venus": number;
|
|
@@ -35,3 +35,12 @@ export function computeEarthFrameOfDate(sample: {
|
|
|
35
35
|
* @returns {number} θ in radians, in (−π, π]
|
|
36
36
|
*/
|
|
37
37
|
export function solveWheelAngleForLongitude(lambdaRad: number, e: number, periRad: number): number;
|
|
38
|
+
/**
|
|
39
|
+
* The scene's world frame: R maps a J2000-ecliptic vector to world, columns
|
|
40
|
+
* [ĝ, n̂ × ĝ, n̂] = [the equinox, longitude 90°, the ecliptic pole] with
|
|
41
|
+
* n̂ = world Y exactly and ĝ at the view azimuth.
|
|
42
|
+
* @returns {number[][]} a 3×3 rotation matrix, rows × columns
|
|
43
|
+
*/
|
|
44
|
+
export function computeSceneWorldFrameJ2000(): number[][];
|
|
45
|
+
/** The J2000 equinox's azimuth in the scene's world XZ plane, degrees (atan2(x, z)) — the view convention. */
|
|
46
|
+
export const SCENE_EQUINOX_VIEW_AZIMUTH_DEG: 158.2265109779131;
|
package/types/index.d.ts
CHANGED
|
@@ -15,6 +15,7 @@ export { createDeepEccChannel } from "./moon/deep-ecc-channel.cjs";
|
|
|
15
15
|
export { createDeepOrbitalHistory } from "./earth/deep-orbital-history.cjs";
|
|
16
16
|
export { createSiderealYearChannel } from "./earth/sidereal-year-channel.cjs";
|
|
17
17
|
export { createPlanetModel } from "./planets/model.cjs";
|
|
18
|
+
export { PLANET_DISPLAY_NAMES } from "./planets/display-names.cjs";
|
|
18
19
|
export { createDeltaTCycles } from "./deltat/cycles.cjs";
|
|
19
20
|
export { createDeepTimeLod } from "./deltat/deep-time.cjs";
|
|
20
21
|
export { deltaTEspenakMeeusCanonSeconds } from "./deltat/historical.cjs";
|
|
@@ -56,7 +57,7 @@ import { REFERENCE_DATA } from './constants/index.js';
|
|
|
56
57
|
import { assembleModel } from './model.js';
|
|
57
58
|
export { GENERATED as DEFAULT_CONSTANTS, CONSTANTS_HASH, MODEL_VERSION, PREPRINT_DOI, REFERENCE_DATA };
|
|
58
59
|
export { FITTED_COEFFICIENTS, COEFFICIENTS_HASH } from "./constants/index.js";
|
|
59
|
-
export { computeEarthFrameOfDate, solveWheelAngleForLongitude } from "./earth/frame-of-date.cjs";
|
|
60
|
+
export { computeEarthFrameOfDate, solveWheelAngleForLongitude, computeSceneWorldFrameJ2000, SCENE_EQUINOX_VIEW_AZIMUTH_DEG } from "./earth/frame-of-date.cjs";
|
|
60
61
|
export { derivePlanetGeometry, scaffoldOrbitInputs } from "./planets/geometry.cjs";
|
|
61
62
|
export { buildPlanetChainsFromArtifactData, computePlanetElementsAtYear, computeHeliocentricEclipticFromElements, computePoissonArgRad, computeOsculatingElements, solveKeplerRad, computeApsidalSecularDegPerYr, ANCHOR_EPOCH_YEAR, ANCHOR_EPOCH_JD } from "./planets/keplerian-chain.cjs";
|
|
62
63
|
export { computeEquatorNodeOriginSFrameDeg, convertNodeSFrameToEquatorOriginDeg } from "./planets/inv-plane-frame.cjs";
|
package/types/model.d.ts
CHANGED
|
@@ -261,6 +261,8 @@ export function assembleModel(C: Readonly<Record<string, any>>, F: Readonly<Reco
|
|
|
261
261
|
meanDeg: number;
|
|
262
262
|
maxDeg: number;
|
|
263
263
|
} | null;
|
|
264
|
+
spinAxisEclipticJ2000AtYear: (year: number) => number[] | null;
|
|
265
|
+
orbitNormalEclipticJ2000AtYear: (year: number) => number[];
|
|
264
266
|
stepYr: number;
|
|
265
267
|
maxSpanYr: 10000000;
|
|
266
268
|
}>;
|
package/types/moon/series.d.cts
CHANGED
|
@@ -12,7 +12,6 @@ export type MeeusTermTable = Array<[number, number, number, number, number]>;
|
|
|
12
12
|
* moonDistanceJ2000Km: number,
|
|
13
13
|
* j2000JD: number,
|
|
14
14
|
* julianCenturyDays: number,
|
|
15
|
-
* moonMeeusLpCorrectionDeg: number,
|
|
16
15
|
* fwA2RateDegPerCy: number,
|
|
17
16
|
* fwA3RateDegPerCy: number,
|
|
18
17
|
* },
|
|
@@ -46,7 +45,6 @@ export function createMoonSeries({ constants, fns }: {
|
|
|
46
45
|
moonDistanceJ2000Km: number;
|
|
47
46
|
j2000JD: number;
|
|
48
47
|
julianCenturyDays: number;
|
|
49
|
-
moonMeeusLpCorrectionDeg: number;
|
|
50
48
|
fwA2RateDegPerCy: number;
|
|
51
49
|
fwA3RateDegPerCy: number;
|
|
52
50
|
};
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export type PlanetGeometryBody = {
|
|
2
2
|
key: string;
|
|
3
|
-
type?: string;
|
|
4
3
|
periodDays: number;
|
|
5
4
|
semiMajorAxisAu?: number;
|
|
6
5
|
orbitalEccentricityBase?: number;
|
|
@@ -12,7 +11,6 @@ export type PlanetGeometryBody = {
|
|
|
12
11
|
/**
|
|
13
12
|
* @typedef {{
|
|
14
13
|
* key: string,
|
|
15
|
-
* type?: string,
|
|
16
14
|
* periodDays: number,
|
|
17
15
|
* semiMajorAxisAu?: number,
|
|
18
16
|
* orbitalEccentricityBase?: number,
|
|
@@ -40,6 +38,7 @@ export type PlanetGeometryBody = {
|
|
|
40
38
|
* elipticOrbit: (number | undefined), perihelionDistance: (number | undefined),
|
|
41
39
|
* speedKmh: number, rotationPeriodHours: (number | undefined),
|
|
42
40
|
* eccentricityPerihelion: (number | undefined), lowestPoint: (number | undefined),
|
|
41
|
+
* ellipseFamily: (string | undefined),
|
|
43
42
|
* }}
|
|
44
43
|
*/
|
|
45
44
|
export function derivePlanetGeometry(body: PlanetGeometryBody, env: {
|
|
@@ -58,6 +57,7 @@ export function derivePlanetGeometry(body: PlanetGeometryBody, env: {
|
|
|
58
57
|
rotationPeriodHours: (number | undefined);
|
|
59
58
|
eccentricityPerihelion: (number | undefined);
|
|
60
59
|
lowestPoint: (number | undefined);
|
|
60
|
+
ellipseFamily: (string | undefined);
|
|
61
61
|
};
|
|
62
62
|
/**
|
|
63
63
|
* The scaffold's orbit inputs for one body — ONE home for the rule (plan 09
|
|
@@ -74,3 +74,10 @@ export function scaffoldOrbitInputs(key: string, chainArtifact: any, fallbackPer
|
|
|
74
74
|
periodDays: number;
|
|
75
75
|
semiMajorAxisAu: (number | undefined);
|
|
76
76
|
};
|
|
77
|
+
/**
|
|
78
|
+
* Each body's scaffold ellipse family (the survey's measured taxonomy above).
|
|
79
|
+
* Pluto, Halley and Ceres take their body-name branches; a key absent here
|
|
80
|
+
* has no ellipse family (geometry-only).
|
|
81
|
+
* @type {Readonly<Record<string, string>>}
|
|
82
|
+
*/
|
|
83
|
+
export const SCAFFOLD_ELLIPSE_FAMILY: Readonly<Record<string, string>>;
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
export type PlanetModelBody = {
|
|
2
|
-
/**
|
|
3
|
-
* - geometry type branch ('I' | 'II' | 'III')
|
|
4
|
-
*/
|
|
5
|
-
type?: string | undefined;
|
|
6
2
|
/**
|
|
7
3
|
* - the observed sidereal period input, SI days (the scaffold period of the no-chain bodies; the chain planets ride the artifact's elements)
|
|
8
4
|
*/
|
|
@@ -47,7 +43,6 @@ export type PlanetModelRecord = {
|
|
|
47
43
|
};
|
|
48
44
|
/**
|
|
49
45
|
* @typedef {Object} PlanetModelBody
|
|
50
|
-
* @property {string} [type] - geometry type branch ('I' | 'II' | 'III')
|
|
51
46
|
* @property {number} solarYearInput - the observed sidereal period input, SI days (the scaffold period of the no-chain bodies; the chain planets ride the artifact's elements)
|
|
52
47
|
* @property {number} [invPlaneInclinationJ2000]
|
|
53
48
|
* @property {number} [longitudePerihelion]
|
|
@@ -99,6 +99,8 @@ export function createPlanetSpinChannel(deps: {
|
|
|
99
99
|
meanDeg: number;
|
|
100
100
|
maxDeg: number;
|
|
101
101
|
} | null;
|
|
102
|
+
spinAxisEclipticJ2000AtYear: (year: number) => number[] | null;
|
|
103
|
+
orbitNormalEclipticJ2000AtYear: (year: number) => number[];
|
|
102
104
|
stepYr: number;
|
|
103
105
|
maxSpanYr: 10000000;
|
|
104
106
|
}>;
|
|
@@ -152,6 +154,8 @@ export function createPlanetSpinChannelFromArtifacts(deps: {
|
|
|
152
154
|
meanDeg: number;
|
|
153
155
|
maxDeg: number;
|
|
154
156
|
} | null;
|
|
157
|
+
spinAxisEclipticJ2000AtYear: (year: number) => number[] | null;
|
|
158
|
+
orbitNormalEclipticJ2000AtYear: (year: number) => number[];
|
|
155
159
|
stepYr: number;
|
|
156
160
|
maxSpanYr: 10000000;
|
|
157
161
|
}>;
|