@interstellar-tools/equations 0.48.0 → 0.50.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/dist/categories/angle/compute-angle.d.ts +1 -1
- package/dist/categories/angle/compute-angle.js +4 -4
- package/dist/categories/angle/compute-angle.js.map +1 -1
- package/dist/categories/anomalies/mean-to-eccentric-anomaly.d.ts +1 -1
- package/dist/categories/anomalies/mean-to-eccentric-anomaly.js +4 -4
- package/dist/categories/anomalies/mean-to-eccentric-anomaly.js.map +1 -1
- package/dist/categories/anomalies/true-to-mean-anomaly.d.ts +1 -1
- package/dist/categories/anomalies/true-to-mean-anomaly.js +2 -2
- package/dist/categories/anomalies/true-to-mean-anomaly.js.map +1 -1
- package/dist/categories/cartography/body-fixed-from-inertial-dcm-iau.js +3 -3
- package/dist/categories/cartography/body-fixed-from-inertial-dcm-iau.js.map +1 -1
- package/dist/categories/gravity/acceleration-on1-by2.js +1 -1
- package/dist/categories/gravity/acceleration-on1-by2.js.map +1 -1
- package/dist/categories/gravity/force-on1-by2.js +1 -1
- package/dist/categories/gravity/force-on1-by2.js.map +1 -1
- package/dist/categories/kepler/solve-kepler-high-eccentricity.d.ts +1 -1
- package/dist/categories/kepler/solve-kepler-high-eccentricity.js +2 -2
- package/dist/categories/kepler/solve-kepler-high-eccentricity.js.map +1 -1
- package/dist/categories/kepler/solve-kepler.d.ts +1 -1
- package/dist/categories/kepler/solve-kepler.js +5 -5
- package/dist/categories/kepler/solve-kepler.js.map +1 -1
- package/dist/index.d.ts +49 -49
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +49 -49
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/dist/__tests__/helpers/index.d.ts +0 -9
- package/dist/__tests__/helpers/index.d.ts.map +0 -1
- package/dist/__tests__/helpers/index.js +0 -45
- package/dist/__tests__/helpers/index.js.map +0 -1
- package/dist/categories/angle/__tests__/compute-angle.int.spec.d.ts +0 -2
- package/dist/categories/angle/__tests__/compute-angle.int.spec.d.ts.map +0 -1
- package/dist/categories/angle/__tests__/compute-angle.int.spec.js +0 -62
- package/dist/categories/angle/__tests__/compute-angle.int.spec.js.map +0 -1
- package/dist/categories/angle/__tests__/wrap-angle.spec.d.ts +0 -2
- package/dist/categories/angle/__tests__/wrap-angle.spec.d.ts.map +0 -1
- package/dist/categories/angle/__tests__/wrap-angle.spec.js +0 -60
- package/dist/categories/angle/__tests__/wrap-angle.spec.js.map +0 -1
- package/dist/categories/anomalies/__tests__/eccentric-to-true-anomaly.spec.d.ts +0 -2
- package/dist/categories/anomalies/__tests__/eccentric-to-true-anomaly.spec.d.ts.map +0 -1
- package/dist/categories/anomalies/__tests__/eccentric-to-true-anomaly.spec.js +0 -33
- package/dist/categories/anomalies/__tests__/eccentric-to-true-anomaly.spec.js.map +0 -1
- package/dist/categories/anomalies/__tests__/mean-to-eccentric-anomaly.spec.d.ts +0 -2
- package/dist/categories/anomalies/__tests__/mean-to-eccentric-anomaly.spec.d.ts.map +0 -1
- package/dist/categories/anomalies/__tests__/mean-to-eccentric-anomaly.spec.js +0 -197
- package/dist/categories/anomalies/__tests__/mean-to-eccentric-anomaly.spec.js.map +0 -1
- package/dist/categories/anomalies/__tests__/true-to-mean-anomaly.spec.d.ts +0 -2
- package/dist/categories/anomalies/__tests__/true-to-mean-anomaly.spec.d.ts.map +0 -1
- package/dist/categories/anomalies/__tests__/true-to-mean-anomaly.spec.js +0 -46
- package/dist/categories/anomalies/__tests__/true-to-mean-anomaly.spec.js.map +0 -1
- package/dist/categories/cartography/__tests__/body-fixed-from-inertial-dcm-iau.int.spec.d.ts +0 -2
- package/dist/categories/cartography/__tests__/body-fixed-from-inertial-dcm-iau.int.spec.d.ts.map +0 -1
- package/dist/categories/cartography/__tests__/body-fixed-from-inertial-dcm-iau.int.spec.js +0 -56
- package/dist/categories/cartography/__tests__/body-fixed-from-inertial-dcm-iau.int.spec.js.map +0 -1
- package/dist/categories/cartography/__tests__/eccentricity-squared-oblate-spheroid.spec.d.ts +0 -2
- package/dist/categories/cartography/__tests__/eccentricity-squared-oblate-spheroid.spec.d.ts.map +0 -1
- package/dist/categories/cartography/__tests__/eccentricity-squared-oblate-spheroid.spec.js +0 -60
- package/dist/categories/cartography/__tests__/eccentricity-squared-oblate-spheroid.spec.js.map +0 -1
- package/dist/categories/cartography/__tests__/flattening-oblate-spheroid.spec.d.ts +0 -2
- package/dist/categories/cartography/__tests__/flattening-oblate-spheroid.spec.d.ts.map +0 -1
- package/dist/categories/cartography/__tests__/flattening-oblate-spheroid.spec.js +0 -60
- package/dist/categories/cartography/__tests__/flattening-oblate-spheroid.spec.js.map +0 -1
- package/dist/categories/cartography/__tests__/is-on-triaxial-ellipsoid-surface.spec.d.ts +0 -2
- package/dist/categories/cartography/__tests__/is-on-triaxial-ellipsoid-surface.spec.d.ts.map +0 -1
- package/dist/categories/cartography/__tests__/is-on-triaxial-ellipsoid-surface.spec.js +0 -73
- package/dist/categories/cartography/__tests__/is-on-triaxial-ellipsoid-surface.spec.js.map +0 -1
- package/dist/categories/cartography/__tests__/planetocentric-latitude.spec.d.ts +0 -2
- package/dist/categories/cartography/__tests__/planetocentric-latitude.spec.d.ts.map +0 -1
- package/dist/categories/cartography/__tests__/planetocentric-latitude.spec.js +0 -69
- package/dist/categories/cartography/__tests__/planetocentric-latitude.spec.js.map +0 -1
- package/dist/categories/cartography/__tests__/planetographic-latitude-oblate.spec.d.ts +0 -2
- package/dist/categories/cartography/__tests__/planetographic-latitude-oblate.spec.d.ts.map +0 -1
- package/dist/categories/cartography/__tests__/planetographic-latitude-oblate.spec.js +0 -103
- package/dist/categories/cartography/__tests__/planetographic-latitude-oblate.spec.js.map +0 -1
- package/dist/categories/gravity/__tests__/gravitational-acceleration-on1-by2.int.spec.d.ts +0 -2
- package/dist/categories/gravity/__tests__/gravitational-acceleration-on1-by2.int.spec.d.ts.map +0 -1
- package/dist/categories/gravity/__tests__/gravitational-acceleration-on1-by2.int.spec.js +0 -87
- package/dist/categories/gravity/__tests__/gravitational-acceleration-on1-by2.int.spec.js.map +0 -1
- package/dist/categories/gravity/__tests__/gravitational-force-on1-by2.int.spec.d.ts +0 -2
- package/dist/categories/gravity/__tests__/gravitational-force-on1-by2.int.spec.d.ts.map +0 -1
- package/dist/categories/gravity/__tests__/gravitational-force-on1-by2.int.spec.js +0 -107
- package/dist/categories/gravity/__tests__/gravitational-force-on1-by2.int.spec.js.map +0 -1
- package/dist/categories/gravity/__tests__/gravitational-force.spec.d.ts +0 -2
- package/dist/categories/gravity/__tests__/gravitational-force.spec.d.ts.map +0 -1
- package/dist/categories/gravity/__tests__/gravitational-force.spec.js +0 -106
- package/dist/categories/gravity/__tests__/gravitational-force.spec.js.map +0 -1
- package/dist/categories/gravity/__tests__/gravitational-parameters.spec.d.ts +0 -2
- package/dist/categories/gravity/__tests__/gravitational-parameters.spec.d.ts.map +0 -1
- package/dist/categories/gravity/__tests__/gravitational-parameters.spec.js +0 -75
- package/dist/categories/gravity/__tests__/gravitational-parameters.spec.js.map +0 -1
- package/dist/categories/helpers/__tests__/apply-matrix-3.spec.d.ts +0 -2
- package/dist/categories/helpers/__tests__/apply-matrix-3.spec.d.ts.map +0 -1
- package/dist/categories/helpers/__tests__/apply-matrix-3.spec.js +0 -79
- package/dist/categories/helpers/__tests__/apply-matrix-3.spec.js.map +0 -1
- package/dist/categories/helpers/__tests__/det-3.spec.d.ts +0 -2
- package/dist/categories/helpers/__tests__/det-3.spec.d.ts.map +0 -1
- package/dist/categories/helpers/__tests__/det-3.spec.js +0 -73
- package/dist/categories/helpers/__tests__/det-3.spec.js.map +0 -1
- package/dist/categories/helpers/__tests__/mat-mul3.spec.d.ts +0 -2
- package/dist/categories/helpers/__tests__/mat-mul3.spec.d.ts.map +0 -1
- package/dist/categories/helpers/__tests__/mat-mul3.spec.js +0 -86
- package/dist/categories/helpers/__tests__/mat-mul3.spec.js.map +0 -1
- package/dist/categories/helpers/__tests__/misc.spec.d.ts +0 -2
- package/dist/categories/helpers/__tests__/misc.spec.d.ts.map +0 -1
- package/dist/categories/helpers/__tests__/misc.spec.js +0 -101
- package/dist/categories/helpers/__tests__/misc.spec.js.map +0 -1
- package/dist/categories/helpers/__tests__/radians.spec.d.ts +0 -2
- package/dist/categories/helpers/__tests__/radians.spec.d.ts.map +0 -1
- package/dist/categories/helpers/__tests__/radians.spec.js +0 -37
- package/dist/categories/helpers/__tests__/radians.spec.js.map +0 -1
- package/dist/categories/helpers/__tests__/rot-1.spec.d.ts +0 -2
- package/dist/categories/helpers/__tests__/rot-1.spec.d.ts.map +0 -1
- package/dist/categories/helpers/__tests__/rot-1.spec.js +0 -59
- package/dist/categories/helpers/__tests__/rot-1.spec.js.map +0 -1
- package/dist/categories/helpers/__tests__/rot-3.spec.d.ts +0 -2
- package/dist/categories/helpers/__tests__/rot-3.spec.d.ts.map +0 -1
- package/dist/categories/helpers/__tests__/rot-3.spec.js +0 -65
- package/dist/categories/helpers/__tests__/rot-3.spec.js.map +0 -1
- package/dist/categories/kepler/__tests__/solve-kepler-bisection.spec.d.ts +0 -2
- package/dist/categories/kepler/__tests__/solve-kepler-bisection.spec.d.ts.map +0 -1
- package/dist/categories/kepler/__tests__/solve-kepler-bisection.spec.js +0 -86
- package/dist/categories/kepler/__tests__/solve-kepler-bisection.spec.js.map +0 -1
- package/dist/categories/kepler/__tests__/solve-kepler-high-eccentricity.spec.d.ts +0 -2
- package/dist/categories/kepler/__tests__/solve-kepler-high-eccentricity.spec.d.ts.map +0 -1
- package/dist/categories/kepler/__tests__/solve-kepler-high-eccentricity.spec.js +0 -81
- package/dist/categories/kepler/__tests__/solve-kepler-high-eccentricity.spec.js.map +0 -1
- package/dist/categories/kepler/__tests__/solve-kepler-newton-raphson.spec.d.ts +0 -2
- package/dist/categories/kepler/__tests__/solve-kepler-newton-raphson.spec.d.ts.map +0 -1
- package/dist/categories/kepler/__tests__/solve-kepler-newton-raphson.spec.js +0 -50
- package/dist/categories/kepler/__tests__/solve-kepler-newton-raphson.spec.js.map +0 -1
- package/dist/categories/kepler/__tests__/solve-kepler.int.spec.d.ts +0 -2
- package/dist/categories/kepler/__tests__/solve-kepler.int.spec.d.ts.map +0 -1
- package/dist/categories/kepler/__tests__/solve-kepler.int.spec.js +0 -76
- package/dist/categories/kepler/__tests__/solve-kepler.int.spec.js.map +0 -1
- package/dist/categories/manoeuvres/__tests__/combine-burns-delta-v.spec.d.ts +0 -2
- package/dist/categories/manoeuvres/__tests__/combine-burns-delta-v.spec.d.ts.map +0 -1
- package/dist/categories/manoeuvres/__tests__/combine-burns-delta-v.spec.js +0 -103
- package/dist/categories/manoeuvres/__tests__/combine-burns-delta-v.spec.js.map +0 -1
- package/dist/categories/manoeuvres/__tests__/gravity-assist-turning-angle.spec.d.ts +0 -2
- package/dist/categories/manoeuvres/__tests__/gravity-assist-turning-angle.spec.d.ts.map +0 -1
- package/dist/categories/manoeuvres/__tests__/gravity-assist-turning-angle.spec.js +0 -89
- package/dist/categories/manoeuvres/__tests__/gravity-assist-turning-angle.spec.js.map +0 -1
- package/dist/categories/manoeuvres/__tests__/hohmann-transfer.spec.d.ts +0 -2
- package/dist/categories/manoeuvres/__tests__/hohmann-transfer.spec.d.ts.map +0 -1
- package/dist/categories/manoeuvres/__tests__/hohmann-transfer.spec.js +0 -101
- package/dist/categories/manoeuvres/__tests__/hohmann-transfer.spec.js.map +0 -1
- package/dist/categories/manoeuvres/__tests__/oberth-energy-gain.spec.d.ts +0 -2
- package/dist/categories/manoeuvres/__tests__/oberth-energy-gain.spec.d.ts.map +0 -1
- package/dist/categories/manoeuvres/__tests__/oberth-energy-gain.spec.js +0 -71
- package/dist/categories/manoeuvres/__tests__/oberth-energy-gain.spec.js.map +0 -1
- package/dist/categories/manoeuvres/__tests__/plane-change-delta-v.spec.d.ts +0 -2
- package/dist/categories/manoeuvres/__tests__/plane-change-delta-v.spec.d.ts.map +0 -1
- package/dist/categories/manoeuvres/__tests__/plane-change-delta-v.spec.js +0 -90
- package/dist/categories/manoeuvres/__tests__/plane-change-delta-v.spec.js.map +0 -1
- package/dist/categories/manoeuvres/__tests__/rocket-delta-v-from-isp.spec.d.ts +0 -2
- package/dist/categories/manoeuvres/__tests__/rocket-delta-v-from-isp.spec.d.ts.map +0 -1
- package/dist/categories/manoeuvres/__tests__/rocket-delta-v-from-isp.spec.js +0 -84
- package/dist/categories/manoeuvres/__tests__/rocket-delta-v-from-isp.spec.js.map +0 -1
- package/dist/categories/manoeuvres/__tests__/rocket-delta-v-from-ve.spec.d.ts +0 -2
- package/dist/categories/manoeuvres/__tests__/rocket-delta-v-from-ve.spec.d.ts.map +0 -1
- package/dist/categories/manoeuvres/__tests__/rocket-delta-v-from-ve.spec.js +0 -65
- package/dist/categories/manoeuvres/__tests__/rocket-delta-v-from-ve.spec.js.map +0 -1
- package/dist/categories/orbits/__tests__/atmospheric-drag-acceleration.spec.d.ts +0 -2
- package/dist/categories/orbits/__tests__/atmospheric-drag-acceleration.spec.d.ts.map +0 -1
- package/dist/categories/orbits/__tests__/atmospheric-drag-acceleration.spec.js +0 -71
- package/dist/categories/orbits/__tests__/atmospheric-drag-acceleration.spec.js.map +0 -1
- package/dist/categories/orbits/__tests__/characteristic-energy-c3.spec.d.ts +0 -2
- package/dist/categories/orbits/__tests__/characteristic-energy-c3.spec.d.ts.map +0 -1
- package/dist/categories/orbits/__tests__/characteristic-energy-c3.spec.js +0 -36
- package/dist/categories/orbits/__tests__/characteristic-energy-c3.spec.js.map +0 -1
- package/dist/categories/orbits/__tests__/circular-speed.spec.d.ts +0 -2
- package/dist/categories/orbits/__tests__/circular-speed.spec.d.ts.map +0 -1
- package/dist/categories/orbits/__tests__/circular-speed.spec.js +0 -69
- package/dist/categories/orbits/__tests__/circular-speed.spec.js.map +0 -1
- package/dist/categories/orbits/__tests__/cw-hill-derivatives.spec.d.ts +0 -2
- package/dist/categories/orbits/__tests__/cw-hill-derivatives.spec.d.ts.map +0 -1
- package/dist/categories/orbits/__tests__/cw-hill-derivatives.spec.js +0 -64
- package/dist/categories/orbits/__tests__/cw-hill-derivatives.spec.js.map +0 -1
- package/dist/categories/orbits/__tests__/escape-speed.spec.d.ts +0 -2
- package/dist/categories/orbits/__tests__/escape-speed.spec.d.ts.map +0 -1
- package/dist/categories/orbits/__tests__/escape-speed.spec.js +0 -79
- package/dist/categories/orbits/__tests__/escape-speed.spec.js.map +0 -1
- package/dist/categories/orbits/__tests__/flight-path-angle-from-true-anomaly.spec.d.ts +0 -2
- package/dist/categories/orbits/__tests__/flight-path-angle-from-true-anomaly.spec.d.ts.map +0 -1
- package/dist/categories/orbits/__tests__/flight-path-angle-from-true-anomaly.spec.js +0 -92
- package/dist/categories/orbits/__tests__/flight-path-angle-from-true-anomaly.spec.js.map +0 -1
- package/dist/categories/orbits/__tests__/hyperbolic-periapsis-speed.spec.d.ts +0 -2
- package/dist/categories/orbits/__tests__/hyperbolic-periapsis-speed.spec.d.ts.map +0 -1
- package/dist/categories/orbits/__tests__/hyperbolic-periapsis-speed.spec.js +0 -64
- package/dist/categories/orbits/__tests__/hyperbolic-periapsis-speed.spec.js.map +0 -1
- package/dist/categories/orbits/__tests__/j2-argument-of-perigee-rate.spec.d.ts +0 -2
- package/dist/categories/orbits/__tests__/j2-argument-of-perigee-rate.spec.d.ts.map +0 -1
- package/dist/categories/orbits/__tests__/j2-argument-of-perigee-rate.spec.js +0 -104
- package/dist/categories/orbits/__tests__/j2-argument-of-perigee-rate.spec.js.map +0 -1
- package/dist/categories/orbits/__tests__/j2-nodal-precession-rate.spec.d.ts +0 -2
- package/dist/categories/orbits/__tests__/j2-nodal-precession-rate.spec.d.ts.map +0 -1
- package/dist/categories/orbits/__tests__/j2-nodal-precession-rate.spec.js +0 -99
- package/dist/categories/orbits/__tests__/j2-nodal-precession-rate.spec.js.map +0 -1
- package/dist/categories/orbits/__tests__/kepler-period.spec.d.ts +0 -2
- package/dist/categories/orbits/__tests__/kepler-period.spec.d.ts.map +0 -1
- package/dist/categories/orbits/__tests__/kepler-period.spec.js +0 -72
- package/dist/categories/orbits/__tests__/kepler-period.spec.js.map +0 -1
- package/dist/categories/orbits/__tests__/mean-motion.spec.d.ts +0 -2
- package/dist/categories/orbits/__tests__/mean-motion.spec.d.ts.map +0 -1
- package/dist/categories/orbits/__tests__/mean-motion.spec.js +0 -48
- package/dist/categories/orbits/__tests__/mean-motion.spec.js.map +0 -1
- package/dist/categories/orbits/__tests__/peri-apoapsis-radii.spec.d.ts +0 -2
- package/dist/categories/orbits/__tests__/peri-apoapsis-radii.spec.d.ts.map +0 -1
- package/dist/categories/orbits/__tests__/peri-apoapsis-radii.spec.js +0 -74
- package/dist/categories/orbits/__tests__/peri-apoapsis-radii.spec.js.map +0 -1
- package/dist/categories/orbits/__tests__/specific-angular-momentum-from-elements.spec.d.ts +0 -2
- package/dist/categories/orbits/__tests__/specific-angular-momentum-from-elements.spec.d.ts.map +0 -1
- package/dist/categories/orbits/__tests__/specific-angular-momentum-from-elements.spec.js +0 -86
- package/dist/categories/orbits/__tests__/specific-angular-momentum-from-elements.spec.js.map +0 -1
- package/dist/categories/orbits/__tests__/specific-angular-momentum.spec.d.ts +0 -2
- package/dist/categories/orbits/__tests__/specific-angular-momentum.spec.d.ts.map +0 -1
- package/dist/categories/orbits/__tests__/specific-angular-momentum.spec.js +0 -85
- package/dist/categories/orbits/__tests__/specific-angular-momentum.spec.js.map +0 -1
- package/dist/categories/orbits/__tests__/specific-mechanical-energy.spec.d.ts +0 -2
- package/dist/categories/orbits/__tests__/specific-mechanical-energy.spec.d.ts.map +0 -1
- package/dist/categories/orbits/__tests__/specific-mechanical-energy.spec.js +0 -81
- package/dist/categories/orbits/__tests__/specific-mechanical-energy.spec.js.map +0 -1
- package/dist/categories/orbits/__tests__/sphere-of-influence-radius.spec.d.ts +0 -2
- package/dist/categories/orbits/__tests__/sphere-of-influence-radius.spec.d.ts.map +0 -1
- package/dist/categories/orbits/__tests__/sphere-of-influence-radius.spec.js +0 -62
- package/dist/categories/orbits/__tests__/sphere-of-influence-radius.spec.js.map +0 -1
- package/dist/categories/orbits/__tests__/vis-viva-speed.spec.d.ts +0 -2
- package/dist/categories/orbits/__tests__/vis-viva-speed.spec.d.ts.map +0 -1
- package/dist/categories/orbits/__tests__/vis-viva-speed.spec.js +0 -80
- package/dist/categories/orbits/__tests__/vis-viva-speed.spec.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gravitational-force.spec.d.ts","sourceRoot":"","sources":["../../../../src/categories/gravity/__tests__/gravitational-force.spec.ts"],"names":[],"mappings":""}
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import assert from 'node:assert/strict';
|
|
2
|
-
import test, { describe } from 'node:test';
|
|
3
|
-
import { G_SI } from '@interstellar-tools/constants';
|
|
4
|
-
import { relClose, vecRelClose } from 'packages/equations/src/__tests__/helpers';
|
|
5
|
-
import { gravitationalForce } from '../gravitational-force';
|
|
6
|
-
import { norm } from '../../helpers/misc';
|
|
7
|
-
describe('gravitationalForce', () => {
|
|
8
|
-
test('computes simple 1D case (+x) with custom G', () => {
|
|
9
|
-
const G = 1; // simple numbers to check algebra
|
|
10
|
-
const m1 = 2;
|
|
11
|
-
const m2 = 3;
|
|
12
|
-
const r1 = [0, 0, 0];
|
|
13
|
-
const r2 = [10, 0, 0];
|
|
14
|
-
const res = gravitationalForce(m1, m2, r1, r2, G);
|
|
15
|
-
// Expected: |F| = G m1 m2 / r² = 6 / 100 = 0.06; direction = +x
|
|
16
|
-
relClose(res.magnitude, 0.06);
|
|
17
|
-
vecRelClose(res.vector, [0.06, 0, 0]);
|
|
18
|
-
// invariants
|
|
19
|
-
relClose(norm(res.vector), res.magnitude);
|
|
20
|
-
relClose(norm(res.direction), 1);
|
|
21
|
-
vecRelClose(res.vector, [
|
|
22
|
-
res.magnitude * res.direction[0],
|
|
23
|
-
res.magnitude * res.direction[1],
|
|
24
|
-
res.magnitude * res.direction[2]
|
|
25
|
-
]);
|
|
26
|
-
});
|
|
27
|
-
test('direction points from body 1 toward body 2 (arbitrary 3D)', () => {
|
|
28
|
-
const G = 1.23;
|
|
29
|
-
const m1 = 1;
|
|
30
|
-
const m2 = 4;
|
|
31
|
-
const r1 = [1, 2, 3];
|
|
32
|
-
const r2 = [-2, 6, 3]; // displacement = (-3, 4, 0)
|
|
33
|
-
const res = gravitationalForce(m1, m2, r1, r2, G);
|
|
34
|
-
// direction should align with normalized (r2 - r1)
|
|
35
|
-
const dr = [
|
|
36
|
-
r2[0] - r1[0],
|
|
37
|
-
r2[1] - r1[1],
|
|
38
|
-
r2[2] - r1[2]
|
|
39
|
-
];
|
|
40
|
-
const r = Math.hypot(...dr);
|
|
41
|
-
const rhat = [dr[0] / r, dr[1] / r, dr[2] / r];
|
|
42
|
-
vecRelClose(res.direction, rhat, 1e-12);
|
|
43
|
-
// vector == magnitude * rhat
|
|
44
|
-
vecRelClose(res.vector, [
|
|
45
|
-
res.magnitude * rhat[0],
|
|
46
|
-
res.magnitude * rhat[1],
|
|
47
|
-
res.magnitude * rhat[2]
|
|
48
|
-
]);
|
|
49
|
-
});
|
|
50
|
-
test("Newton's 3rd law: F_1<-2 = - F_2<-1", () => {
|
|
51
|
-
const G = 9.87;
|
|
52
|
-
const m1 = 7;
|
|
53
|
-
const m2 = 11;
|
|
54
|
-
const r1 = [0, -2, 5];
|
|
55
|
-
const r2 = [3, 1, -1];
|
|
56
|
-
const F12 = gravitationalForce(m1, m2, r1, r2, G).vector;
|
|
57
|
-
const F21 = gravitationalForce(m2, m1, r2, r1, G).vector;
|
|
58
|
-
vecRelClose(F12, [-F21[0], -F21[1], -F21[2]]);
|
|
59
|
-
});
|
|
60
|
-
test('real-world sanity: Earth-Sun at ~1 AU (matches known ~3.54e22 N)', () => {
|
|
61
|
-
const mEarth = 5.972e24; // kg
|
|
62
|
-
const mSun = 1.9885e30; // kg
|
|
63
|
-
const r1 = [0, 0, 0];
|
|
64
|
-
const r2 = [1.495978707e11, 0, 0]; // m
|
|
65
|
-
const res = gravitationalForce(mEarth, mSun, r1, r2, G_SI);
|
|
66
|
-
// Compare to closed-form expectation (not using the function's internal dir)
|
|
67
|
-
const r = Math.hypot(r2[0] - r1[0], r2[1] - r1[1], r2[2] - r1[2]);
|
|
68
|
-
const expectedMag = (G_SI * mEarth * mSun) / (r * r);
|
|
69
|
-
// exact equivalence (up to FP)
|
|
70
|
-
relClose(res.magnitude, expectedMag, 1e-15);
|
|
71
|
-
// also compare to the commonly quoted magnitude ~3.542e22 N within 0.5%
|
|
72
|
-
const ref = 3.542e22;
|
|
73
|
-
assert.ok(Math.abs(res.magnitude - ref) / ref < 5e-3, `|F| ${res.magnitude} differs from ~${ref}`);
|
|
74
|
-
});
|
|
75
|
-
test('error: negative or non-finite masses', () => {
|
|
76
|
-
const r1 = [0, 0, 0];
|
|
77
|
-
const r2 = [1, 0, 0];
|
|
78
|
-
assert.throws(() => gravitationalForce(-1, 1, r1, r2, 1), /non-negative/);
|
|
79
|
-
assert.throws(() => gravitationalForce(1, -1, r1, r2, 1), /non-negative/);
|
|
80
|
-
assert.throws(() => gravitationalForce(Number.NaN, 1, r1, r2, 1), /finite/);
|
|
81
|
-
assert.throws(() => gravitationalForce(1, Number.POSITIVE_INFINITY, r1, r2, 1), /finite/);
|
|
82
|
-
});
|
|
83
|
-
test('error: coincident positions (r = 0)', () => {
|
|
84
|
-
const r = [3, -4, 5];
|
|
85
|
-
assert.throws(() => gravitationalForce(1, 1, r, r, 1), /singular \(r = 0\)/);
|
|
86
|
-
});
|
|
87
|
-
test('error: invalid G (non-finite or <= 0)', () => {
|
|
88
|
-
const r1 = [0, 0, 0];
|
|
89
|
-
const r2 = [1, 0, 0];
|
|
90
|
-
assert.throws(() => gravitationalForce(1, 1, r1, r2, 0), /positive/);
|
|
91
|
-
assert.throws(() => gravitationalForce(1, 1, r1, r2, Number.NaN), /finite/);
|
|
92
|
-
assert.throws(() => gravitationalForce(1, 1, r1, r2, -1), /positive/);
|
|
93
|
-
});
|
|
94
|
-
test('scales with 1/r²', () => {
|
|
95
|
-
const G = 10;
|
|
96
|
-
const m1 = 2;
|
|
97
|
-
const m2 = 5;
|
|
98
|
-
const r1 = [0, 0, 0];
|
|
99
|
-
const r2a = [2, 0, 0]; // r = 2
|
|
100
|
-
const r2b = [4, 0, 0]; // r = 4 (double -> quarter force)
|
|
101
|
-
const Fa = gravitationalForce(m1, m2, r1, r2a, G).magnitude;
|
|
102
|
-
const Fb = gravitationalForce(m1, m2, r1, r2b, G).magnitude;
|
|
103
|
-
relClose(Fb, Fa / 4);
|
|
104
|
-
});
|
|
105
|
-
});
|
|
106
|
-
//# sourceMappingURL=gravitational-force.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gravitational-force.spec.js","sourceRoot":"","sources":["../../../../src/categories/gravity/__tests__/gravitational-force.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gravitational-parameters.spec.d.ts","sourceRoot":"","sources":["../../../../src/categories/gravity/__tests__/gravitational-parameters.spec.ts"],"names":[],"mappings":""}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import assert from 'node:assert/strict';
|
|
2
|
-
import test, { describe } from 'node:test';
|
|
3
|
-
import { relClose } from 'packages/equations/src/__tests__/helpers';
|
|
4
|
-
import { gravitationalParameter } from '../gravitational-parameter';
|
|
5
|
-
describe('gravitationalParameter', () => {
|
|
6
|
-
test('computes μ = G(M + m) for simple numbers', () => {
|
|
7
|
-
const G = 10;
|
|
8
|
-
const M = 2;
|
|
9
|
-
const m = 3;
|
|
10
|
-
const mu = gravitationalParameter(M, m, G);
|
|
11
|
-
assert.equal(mu, 10 * (2 + 3)); // 50
|
|
12
|
-
});
|
|
13
|
-
test('matches canonical GM_Earth when M = GM/G', () => {
|
|
14
|
-
const GM_canonical = 3.986004418e14; // m³/s²
|
|
15
|
-
const M_from_GM = GM_canonical / 6.6743e-11;
|
|
16
|
-
const mu = gravitationalParameter(M_from_GM); // m=0, G=G_SI
|
|
17
|
-
relClose(mu, GM_canonical, 1e-12);
|
|
18
|
-
});
|
|
19
|
-
test('M = 0 returns μ = G * m', () => {
|
|
20
|
-
const G = 6.7;
|
|
21
|
-
const M = 0;
|
|
22
|
-
const m = 123;
|
|
23
|
-
assert.equal(gravitationalParameter(M, m, G), G * m);
|
|
24
|
-
});
|
|
25
|
-
test('commutative in masses: μ(M,m) = μ(m,M)', () => {
|
|
26
|
-
const G = 3.21;
|
|
27
|
-
const M = 7;
|
|
28
|
-
const m = 11;
|
|
29
|
-
const mu1 = gravitationalParameter(M, m, G);
|
|
30
|
-
const mu2 = gravitationalParameter(m, M, G);
|
|
31
|
-
assert.equal(mu1, mu2);
|
|
32
|
-
});
|
|
33
|
-
test('approximation: when m ≪ M, μ ≈ G M within ~m/M relative error', () => {
|
|
34
|
-
const G = 2;
|
|
35
|
-
const M = 1e8;
|
|
36
|
-
const m = 1e2; // m/M = 1e-6
|
|
37
|
-
const exact = gravitationalParameter(M, m, G);
|
|
38
|
-
const approx = G * M;
|
|
39
|
-
// Relative error should be about m/M
|
|
40
|
-
const relErr = Math.abs(exact - approx) / approx;
|
|
41
|
-
assert.ok(relErr < 2e-6, `relative error ${relErr} not < 2e-6`);
|
|
42
|
-
});
|
|
43
|
-
test('scales linearly with G and with (M + m)', () => {
|
|
44
|
-
const G = 5;
|
|
45
|
-
const M = 10;
|
|
46
|
-
const m = 4;
|
|
47
|
-
const mu = gravitationalParameter(M, m, G);
|
|
48
|
-
const mu_doubleG = gravitationalParameter(M, m, 2 * G);
|
|
49
|
-
const mu_doubleMasses = gravitationalParameter(2 * M, 2 * m, G);
|
|
50
|
-
// Doubling G doubles μ
|
|
51
|
-
relClose(mu_doubleG, 2 * mu, 1e-15, 'doubling G should double μ');
|
|
52
|
-
// Doubling both masses doubles (M + m) and thus doubles μ
|
|
53
|
-
relClose(mu_doubleMasses, 2 * mu, 1e-15, 'doubling masses should double μ');
|
|
54
|
-
});
|
|
55
|
-
test('throws on invalid M (negative or non-finite)', () => {
|
|
56
|
-
const G = 6.7;
|
|
57
|
-
const m = 1;
|
|
58
|
-
assert.throws(() => gravitationalParameter(-1, m, G), /finite|positive/);
|
|
59
|
-
assert.throws(() => gravitationalParameter(Number.NaN, m, G), /finite/);
|
|
60
|
-
});
|
|
61
|
-
test('throws on invalid m (negative or non-finite)', () => {
|
|
62
|
-
const G = 6.7;
|
|
63
|
-
const M = 1;
|
|
64
|
-
assert.throws(() => gravitationalParameter(M, -1, G), /finite|positive/);
|
|
65
|
-
assert.throws(() => gravitationalParameter(M, Number.NaN, G), /finite/);
|
|
66
|
-
});
|
|
67
|
-
test('throws on invalid G (non-finite or ≤ 0)', () => {
|
|
68
|
-
const M = 1;
|
|
69
|
-
const m = 1;
|
|
70
|
-
assert.throws(() => gravitationalParameter(M, m, 0), /positive/);
|
|
71
|
-
assert.throws(() => gravitationalParameter(M, m, -1), /positive/);
|
|
72
|
-
assert.throws(() => gravitationalParameter(M, m, Number.NaN), /finite/);
|
|
73
|
-
});
|
|
74
|
-
});
|
|
75
|
-
//# sourceMappingURL=gravitational-parameters.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gravitational-parameters.spec.js","sourceRoot":"","sources":["../../../../src/categories/gravity/__tests__/gravitational-parameters.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"apply-matrix-3.spec.d.ts","sourceRoot":"","sources":["../../../../src/categories/helpers/__tests__/apply-matrix-3.spec.ts"],"names":[],"mappings":""}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import assert from 'node:assert/strict';
|
|
2
|
-
import test, { describe } from 'node:test';
|
|
3
|
-
import { applyMatrix3 } from '../apply-matrix-3';
|
|
4
|
-
import { vecRelClose } from 'packages/equations/src/__tests__/helpers';
|
|
5
|
-
describe('applyMatrix3', () => {
|
|
6
|
-
test('applies identity matrix (returns same vector)', () => {
|
|
7
|
-
const I = [
|
|
8
|
-
[1, 0, 0],
|
|
9
|
-
[0, 1, 0],
|
|
10
|
-
[0, 0, 1]
|
|
11
|
-
];
|
|
12
|
-
const v = [1, 2, 3];
|
|
13
|
-
const out = applyMatrix3(I, v);
|
|
14
|
-
assert.deepEqual(out, v);
|
|
15
|
-
});
|
|
16
|
-
test('matches the documented example', () => {
|
|
17
|
-
const M = [
|
|
18
|
-
[1, 0, 0],
|
|
19
|
-
[0, 0, -1],
|
|
20
|
-
[0, 1, 0]
|
|
21
|
-
];
|
|
22
|
-
const v = [1, 2, 3];
|
|
23
|
-
const out = applyMatrix3(M, v);
|
|
24
|
-
assert.deepEqual(out, [1, -3, 2]);
|
|
25
|
-
});
|
|
26
|
-
test('handles a general matrix-vector multiplication', () => {
|
|
27
|
-
const M = [
|
|
28
|
-
[2, 3, 5],
|
|
29
|
-
[7, 11, 13],
|
|
30
|
-
[17, 19, 23]
|
|
31
|
-
];
|
|
32
|
-
const v = [29, 31, 37];
|
|
33
|
-
const out = applyMatrix3(M, v);
|
|
34
|
-
const expected = [
|
|
35
|
-
2 * 29 + 3 * 31 + 5 * 37,
|
|
36
|
-
7 * 29 + 11 * 31 + 13 * 37,
|
|
37
|
-
17 * 29 + 19 * 31 + 23 * 37
|
|
38
|
-
];
|
|
39
|
-
assert.deepEqual(out, expected);
|
|
40
|
-
});
|
|
41
|
-
test('is linear: M*(u+v) = M*u + M*v', () => {
|
|
42
|
-
const M = [
|
|
43
|
-
[1.5, -2, 0.25],
|
|
44
|
-
[0, 3, 4],
|
|
45
|
-
[-1, 0.5, 2]
|
|
46
|
-
];
|
|
47
|
-
const u = [1, 2, 3];
|
|
48
|
-
const v = [-4, 5, -6];
|
|
49
|
-
const uPlusV = [u[0] + v[0], u[1] + v[1], u[2] + v[2]];
|
|
50
|
-
const left = applyMatrix3(M, uPlusV);
|
|
51
|
-
const rightU = applyMatrix3(M, u);
|
|
52
|
-
const rightV = applyMatrix3(M, v);
|
|
53
|
-
const right = [
|
|
54
|
-
rightU[0] + rightV[0],
|
|
55
|
-
rightU[1] + rightV[1],
|
|
56
|
-
rightU[2] + rightV[2]
|
|
57
|
-
];
|
|
58
|
-
vecRelClose(left, right);
|
|
59
|
-
});
|
|
60
|
-
test('is homogeneous: M*(k*v) = k*(M*v)', () => {
|
|
61
|
-
const M = [
|
|
62
|
-
[0.1, 0.2, 0.3],
|
|
63
|
-
[0.4, 0.5, 0.6],
|
|
64
|
-
[0.7, 0.8, 0.9]
|
|
65
|
-
];
|
|
66
|
-
const v = [1.1, -2.2, 3.3];
|
|
67
|
-
const k = -7.5;
|
|
68
|
-
const kv = [k * v[0], k * v[1], k * v[2]];
|
|
69
|
-
const left = applyMatrix3(M, kv);
|
|
70
|
-
const right0 = applyMatrix3(M, v);
|
|
71
|
-
const right = [
|
|
72
|
-
k * right0[0],
|
|
73
|
-
k * right0[1],
|
|
74
|
-
k * right0[2]
|
|
75
|
-
];
|
|
76
|
-
vecRelClose(left, right);
|
|
77
|
-
});
|
|
78
|
-
});
|
|
79
|
-
//# sourceMappingURL=apply-matrix-3.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"apply-matrix-3.spec.js","sourceRoot":"","sources":["../../../../src/categories/helpers/__tests__/apply-matrix-3.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"det-3.spec.d.ts","sourceRoot":"","sources":["../../../../src/categories/helpers/__tests__/det-3.spec.ts"],"names":[],"mappings":""}
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import assert from 'node:assert/strict';
|
|
2
|
-
import test, { describe } from 'node:test';
|
|
3
|
-
import { absClose, relClose } from 'packages/equations/src/__tests__/helpers';
|
|
4
|
-
import { det3 } from '../det-3';
|
|
5
|
-
describe('det3', () => {
|
|
6
|
-
test('returns 1 for the identity matrix', () => {
|
|
7
|
-
const I = [
|
|
8
|
-
[1, 0, 0],
|
|
9
|
-
[0, 1, 0],
|
|
10
|
-
[0, 0, 1]
|
|
11
|
-
];
|
|
12
|
-
assert.equal(det3(I), 1);
|
|
13
|
-
});
|
|
14
|
-
test('matches the documented example (det = 1)', () => {
|
|
15
|
-
const A = [
|
|
16
|
-
[1, 2, 3],
|
|
17
|
-
[0, 1, 4],
|
|
18
|
-
[5, 6, 0]
|
|
19
|
-
];
|
|
20
|
-
assert.equal(det3(A), 1);
|
|
21
|
-
});
|
|
22
|
-
test('returns 0 for a singular matrix (dependent rows)', () => {
|
|
23
|
-
const A = [
|
|
24
|
-
[1, 2, 3],
|
|
25
|
-
[2, 4, 6], // 2x row0
|
|
26
|
-
[7, 8, 9]
|
|
27
|
-
];
|
|
28
|
-
assert.equal(det3(A), 0);
|
|
29
|
-
});
|
|
30
|
-
test('changes sign when two rows are swapped', () => {
|
|
31
|
-
const A = [
|
|
32
|
-
[2, 3, 5],
|
|
33
|
-
[7, 11, 13],
|
|
34
|
-
[17, 19, 23]
|
|
35
|
-
];
|
|
36
|
-
const B = [
|
|
37
|
-
[7, 11, 13], // swap row0 and row1
|
|
38
|
-
[2, 3, 5],
|
|
39
|
-
[17, 19, 23]
|
|
40
|
-
];
|
|
41
|
-
const detA = det3(A);
|
|
42
|
-
const detB = det3(B);
|
|
43
|
-
relClose(detB, -detA);
|
|
44
|
-
});
|
|
45
|
-
test('scales by k^3 when the entire matrix is scaled by k', () => {
|
|
46
|
-
const A = [
|
|
47
|
-
[1.5, -2, 0.25],
|
|
48
|
-
[0, 3, 4],
|
|
49
|
-
[-1, 0.5, 2]
|
|
50
|
-
];
|
|
51
|
-
const k = -3.5;
|
|
52
|
-
const kA = [
|
|
53
|
-
[k * A[0][0], k * A[0][1], k * A[0][2]],
|
|
54
|
-
[k * A[1][0], k * A[1][1], k * A[1][2]],
|
|
55
|
-
[k * A[2][0], k * A[2][1], k * A[2][2]]
|
|
56
|
-
];
|
|
57
|
-
const detA = det3(A);
|
|
58
|
-
const detKA = det3(kA);
|
|
59
|
-
relClose(detKA, detA * k * k * k);
|
|
60
|
-
});
|
|
61
|
-
test('returns +1 for a simple rotation matrix about X by 90°', () => {
|
|
62
|
-
// R1(π/2)
|
|
63
|
-
const c = Math.cos(Math.PI / 2);
|
|
64
|
-
const s = Math.sin(Math.PI / 2);
|
|
65
|
-
const R = [
|
|
66
|
-
[1, 0, 0],
|
|
67
|
-
[0, c, -s],
|
|
68
|
-
[0, s, c]
|
|
69
|
-
];
|
|
70
|
-
absClose(det3(R), 1, 1e-12);
|
|
71
|
-
});
|
|
72
|
-
});
|
|
73
|
-
//# sourceMappingURL=det-3.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"det-3.spec.js","sourceRoot":"","sources":["../../../../src/categories/helpers/__tests__/det-3.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mat-mul3.spec.d.ts","sourceRoot":"","sources":["../../../../src/categories/helpers/__tests__/mat-mul3.spec.ts"],"names":[],"mappings":""}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import assert from 'node:assert/strict';
|
|
2
|
-
import test, { describe } from 'node:test';
|
|
3
|
-
import { matRelClose } from 'packages/equations/src/__tests__/helpers';
|
|
4
|
-
import { matMul3 } from '../mat-mul3';
|
|
5
|
-
const I3 = [
|
|
6
|
-
[1, 0, 0],
|
|
7
|
-
[0, 1, 0],
|
|
8
|
-
[0, 0, 1]
|
|
9
|
-
];
|
|
10
|
-
describe('matMul3', () => {
|
|
11
|
-
test('identity is neutral: I*A = A and A*I = A', () => {
|
|
12
|
-
const A = [
|
|
13
|
-
[2, 3, 5],
|
|
14
|
-
[7, 11, 13],
|
|
15
|
-
[17, 19, 23]
|
|
16
|
-
];
|
|
17
|
-
matRelClose(matMul3(I3, A), A);
|
|
18
|
-
matRelClose(matMul3(A, I3), A);
|
|
19
|
-
});
|
|
20
|
-
test('matches a known product (example matrices)', () => {
|
|
21
|
-
const A = [
|
|
22
|
-
[1, 2, 3],
|
|
23
|
-
[0, 1, 4],
|
|
24
|
-
[5, 6, 0]
|
|
25
|
-
];
|
|
26
|
-
const B = [
|
|
27
|
-
[-2, 1, 0],
|
|
28
|
-
[3, 0, 0],
|
|
29
|
-
[4, 5, 1]
|
|
30
|
-
];
|
|
31
|
-
const C = matMul3(A, B);
|
|
32
|
-
// Computed by hand / verified:
|
|
33
|
-
const expected = [
|
|
34
|
-
[16, 16, 3],
|
|
35
|
-
[19, 20, 4],
|
|
36
|
-
[8, 5, 0]
|
|
37
|
-
];
|
|
38
|
-
assert.deepEqual(C, expected);
|
|
39
|
-
});
|
|
40
|
-
test('is associative: (A*B)*C = A*(B*C)', () => {
|
|
41
|
-
const A = [
|
|
42
|
-
[1.5, -2, 0.25],
|
|
43
|
-
[0, 3, 4],
|
|
44
|
-
[-1, 0.5, 2]
|
|
45
|
-
];
|
|
46
|
-
const B = [
|
|
47
|
-
[2, 0, 1],
|
|
48
|
-
[-1, 3, 0],
|
|
49
|
-
[4, -2, 0.5]
|
|
50
|
-
];
|
|
51
|
-
const C = [
|
|
52
|
-
[0.1, 0.2, 0.3],
|
|
53
|
-
[0.4, 0.5, 0.6],
|
|
54
|
-
[0.7, 0.8, 0.9]
|
|
55
|
-
];
|
|
56
|
-
const left = matMul3(matMul3(A, B), C);
|
|
57
|
-
const right = matMul3(A, matMul3(B, C));
|
|
58
|
-
matRelClose(left, right, 1e-12);
|
|
59
|
-
});
|
|
60
|
-
test('distributes over addition: A*(B+C) = A*B + A*C', () => {
|
|
61
|
-
const A = [
|
|
62
|
-
[1, 2, 3],
|
|
63
|
-
[4, 5, 6],
|
|
64
|
-
[7, 8, 9]
|
|
65
|
-
];
|
|
66
|
-
const B = [
|
|
67
|
-
[9, 8, 7],
|
|
68
|
-
[6, 5, 4],
|
|
69
|
-
[3, 2, 1]
|
|
70
|
-
];
|
|
71
|
-
const C = [
|
|
72
|
-
[1, 0, 1],
|
|
73
|
-
[0, 1, 0],
|
|
74
|
-
[2, 0, 2]
|
|
75
|
-
];
|
|
76
|
-
const add = (X, Y) => [
|
|
77
|
-
[X[0][0] + Y[0][0], X[0][1] + Y[0][1], X[0][2] + Y[0][2]],
|
|
78
|
-
[X[1][0] + Y[1][0], X[1][1] + Y[1][1], X[1][2] + Y[1][2]],
|
|
79
|
-
[X[2][0] + Y[2][0], X[2][1] + Y[2][1], X[2][2] + Y[2][2]]
|
|
80
|
-
];
|
|
81
|
-
const left = matMul3(A, add(B, C));
|
|
82
|
-
const right = add(matMul3(A, B), matMul3(A, C));
|
|
83
|
-
matRelClose(left, right, 1e-12);
|
|
84
|
-
});
|
|
85
|
-
});
|
|
86
|
-
//# sourceMappingURL=mat-mul3.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mat-mul3.spec.js","sourceRoot":"","sources":["../../../../src/categories/helpers/__tests__/mat-mul3.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"misc.spec.d.ts","sourceRoot":"","sources":["../../../../src/categories/helpers/__tests__/misc.spec.ts"],"names":[],"mappings":""}
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import assert from 'node:assert/strict';
|
|
2
|
-
import test, { describe } from 'node:test';
|
|
3
|
-
import { absClose, relClose } from 'packages/equations/src/__tests__/helpers';
|
|
4
|
-
import { dot, norm, norm2pi, residual, scale, sub } from '../misc';
|
|
5
|
-
import { TWO_PI } from '@interstellar-tools/constants';
|
|
6
|
-
describe('misc', () => {
|
|
7
|
-
/* ----------------------------- vector helpers ----------------------------- */
|
|
8
|
-
test('norm computes Euclidean length (matches 3-4-12 triangle)', () => {
|
|
9
|
-
const v = [3, 4, 12];
|
|
10
|
-
assert.equal(norm(v), 13);
|
|
11
|
-
});
|
|
12
|
-
test('norm is homogeneous: norm(k*v) = |k| * norm(v)', () => {
|
|
13
|
-
const v = [1.2, -3.4, 5.6];
|
|
14
|
-
const k = -7.5;
|
|
15
|
-
const kv = scale(v, k);
|
|
16
|
-
relClose(norm(kv), Math.abs(k) * norm(v));
|
|
17
|
-
});
|
|
18
|
-
test('scale multiplies each component by s', () => {
|
|
19
|
-
const v = [1, -2, 3];
|
|
20
|
-
assert.deepEqual(scale(v, 10), [10, -20, 30]);
|
|
21
|
-
});
|
|
22
|
-
test('sub computes a - b component-wise', () => {
|
|
23
|
-
const a = [3, 2, 1];
|
|
24
|
-
const b = [1, 1, 1];
|
|
25
|
-
assert.deepEqual(sub(a, b), [2, 1, 0]);
|
|
26
|
-
});
|
|
27
|
-
test('dot matches known value', () => {
|
|
28
|
-
assert.equal(dot([1, 2, 3], [4, 5, 6]), 32);
|
|
29
|
-
});
|
|
30
|
-
test('dot is symmetric: a·b = b·a', () => {
|
|
31
|
-
const a = [1.2, -3.4, 5.6];
|
|
32
|
-
const b = [-7.8, 9.1, -2.3];
|
|
33
|
-
relClose(dot(a, b), dot(b, a));
|
|
34
|
-
});
|
|
35
|
-
test('dot relates to norm: dot(v,v) = norm(v)^2', () => {
|
|
36
|
-
const v = [1.2, -3.4, 5.6];
|
|
37
|
-
relClose(dot(v, v), Math.pow(norm(v), 2));
|
|
38
|
-
});
|
|
39
|
-
/* ----------------------------- angle helpers ----------------------------- */
|
|
40
|
-
test('norm2pi returns values in [0, 2π)', () => {
|
|
41
|
-
const samples = [
|
|
42
|
-
-10 * TWO_PI - 0.1,
|
|
43
|
-
-TWO_PI,
|
|
44
|
-
-Math.PI,
|
|
45
|
-
-0.1,
|
|
46
|
-
0,
|
|
47
|
-
0.1,
|
|
48
|
-
Math.PI,
|
|
49
|
-
TWO_PI,
|
|
50
|
-
10 * TWO_PI + 0.1
|
|
51
|
-
];
|
|
52
|
-
for (const x of samples) {
|
|
53
|
-
const y = norm2pi(x);
|
|
54
|
-
assert.ok(y >= 0, `expected >= 0, got ${y} for x=${x}`);
|
|
55
|
-
assert.ok(y < TWO_PI, `expected < 2π, got ${y} for x=${x}`);
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
test('norm2pi is periodic: norm2pi(x + 2πk) = norm2pi(x)', () => {
|
|
59
|
-
const x = 1.2345;
|
|
60
|
-
const k = 7;
|
|
61
|
-
const y1 = norm2pi(x);
|
|
62
|
-
const y2 = norm2pi(x + k * TWO_PI);
|
|
63
|
-
relClose(y2, y1);
|
|
64
|
-
});
|
|
65
|
-
test('norm2pi maps -π/2 to 3π/2', () => {
|
|
66
|
-
relClose(norm2pi(-Math.PI / 2), (3 * Math.PI) / 2);
|
|
67
|
-
});
|
|
68
|
-
/* ----------------------------- kepler residual ---------------------------- */
|
|
69
|
-
test('residual matches definition: E - e*sin(E) - norm2pi(M)', () => {
|
|
70
|
-
const E = 1.0;
|
|
71
|
-
const e = 0.1;
|
|
72
|
-
const M = 0.9;
|
|
73
|
-
const r = residual(E, e, M);
|
|
74
|
-
const expected = E - e * Math.sin(E) - norm2pi(M);
|
|
75
|
-
relClose(r, expected);
|
|
76
|
-
});
|
|
77
|
-
test('residual(E,e,M) is invariant under adding 2π to M (because M is wrapped)', () => {
|
|
78
|
-
const E = 2.0;
|
|
79
|
-
const e = 0.3;
|
|
80
|
-
const M = 1.5;
|
|
81
|
-
const r1 = residual(E, e, M);
|
|
82
|
-
const r2 = residual(E, e, M + TWO_PI);
|
|
83
|
-
absClose(r1, r2, 1e-12);
|
|
84
|
-
});
|
|
85
|
-
test('when e = 0, residual reduces to E - norm2pi(M)', () => {
|
|
86
|
-
const E = 1.234;
|
|
87
|
-
const e = 0;
|
|
88
|
-
const M = -0.5;
|
|
89
|
-
const r = residual(E, e, M);
|
|
90
|
-
relClose(r, E - norm2pi(M));
|
|
91
|
-
});
|
|
92
|
-
test("for an exact solution of Kepler's equation, residual is ~0", () => {
|
|
93
|
-
// Choose E and e, then define M = E - e*sin(E) (within [0,2π)).
|
|
94
|
-
const E = 1.7;
|
|
95
|
-
const e = 0.2;
|
|
96
|
-
const M = norm2pi(E - e * Math.sin(E));
|
|
97
|
-
const r = residual(E, e, M);
|
|
98
|
-
absClose(r, 0, 1e-12);
|
|
99
|
-
});
|
|
100
|
-
});
|
|
101
|
-
//# sourceMappingURL=misc.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"misc.spec.js","sourceRoot":"","sources":["../../../../src/categories/helpers/__tests__/misc.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"radians.spec.d.ts","sourceRoot":"","sources":["../../../../src/categories/helpers/__tests__/radians.spec.ts"],"names":[],"mappings":""}
|