@interstellar-tools/equations 0.15.0 → 0.16.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.
Files changed (119) hide show
  1. package/dist/__tests__/characteristic-energy-c3.spec.d.ts +2 -0
  2. package/dist/__tests__/characteristic-energy-c3.spec.d.ts.map +1 -0
  3. package/dist/__tests__/characteristic-energy-c3.spec.js +36 -0
  4. package/dist/__tests__/characteristic-energy-c3.spec.js.map +1 -0
  5. package/dist/__tests__/circular-speed.spec.js +2 -2
  6. package/dist/__tests__/circular-speed.spec.js.map +1 -1
  7. package/dist/__tests__/combine-burns-delta-v.spec.js +1 -1
  8. package/dist/__tests__/combine-burns-delta-v.spec.js.map +1 -1
  9. package/dist/__tests__/cw-hill-derivatives.spec.d.ts +2 -0
  10. package/dist/__tests__/cw-hill-derivatives.spec.d.ts.map +1 -0
  11. package/dist/__tests__/cw-hill-derivatives.spec.js +64 -0
  12. package/dist/__tests__/cw-hill-derivatives.spec.js.map +1 -0
  13. package/dist/__tests__/escape-speed.spec.js +2 -2
  14. package/dist/__tests__/escape-speed.spec.js.map +1 -1
  15. package/dist/__tests__/gravitational-acceleration-on1-by2.int.spec.js +4 -4
  16. package/dist/__tests__/gravitational-acceleration-on1-by2.int.spec.js.map +1 -1
  17. package/dist/__tests__/gravitational-force-on1-by2.int.spec.js +1 -1
  18. package/dist/__tests__/gravitational-force-on1-by2.int.spec.js.map +1 -1
  19. package/dist/__tests__/gravitational-force.spec.js +2 -2
  20. package/dist/__tests__/gravitational-force.spec.js.map +1 -1
  21. package/dist/__tests__/gravitational-parameters.spec.js +1 -1
  22. package/dist/__tests__/gravitational-parameters.spec.js.map +1 -1
  23. package/dist/__tests__/gravity-assist-turning-angle.spec.d.ts +2 -0
  24. package/dist/__tests__/gravity-assist-turning-angle.spec.d.ts.map +1 -0
  25. package/dist/__tests__/gravity-assist-turning-angle.spec.js +89 -0
  26. package/dist/__tests__/gravity-assist-turning-angle.spec.js.map +1 -0
  27. package/dist/__tests__/helpers/index.d.ts +2 -0
  28. package/dist/__tests__/helpers/index.d.ts.map +1 -1
  29. package/dist/__tests__/helpers/index.js +6 -0
  30. package/dist/__tests__/helpers/index.js.map +1 -1
  31. package/dist/__tests__/hohmann-transfer.spec.js +1 -1
  32. package/dist/__tests__/hohmann-transfer.spec.js.map +1 -1
  33. package/dist/__tests__/hyperbolic-periapsis-speed.spec.d.ts +2 -0
  34. package/dist/__tests__/hyperbolic-periapsis-speed.spec.d.ts.map +1 -0
  35. package/dist/__tests__/hyperbolic-periapsis-speed.spec.js +64 -0
  36. package/dist/__tests__/hyperbolic-periapsis-speed.spec.js.map +1 -0
  37. package/dist/__tests__/kepler-period.spec.js +5 -5
  38. package/dist/__tests__/kepler-period.spec.js.map +1 -1
  39. package/dist/__tests__/mean-motion.spec.d.ts +2 -0
  40. package/dist/__tests__/mean-motion.spec.d.ts.map +1 -0
  41. package/dist/__tests__/mean-motion.spec.js +48 -0
  42. package/dist/__tests__/mean-motion.spec.js.map +1 -0
  43. package/dist/__tests__/oberth-energy-gain.spec.js +2 -2
  44. package/dist/__tests__/oberth-energy-gain.spec.js.map +1 -1
  45. package/dist/__tests__/specific-angular-momentum-from-elements.spec.js +5 -5
  46. package/dist/__tests__/specific-angular-momentum-from-elements.spec.js.map +1 -1
  47. package/dist/__tests__/specific-mechanical-energy.spec.js +2 -2
  48. package/dist/__tests__/specific-mechanical-energy.spec.js.map +1 -1
  49. package/dist/__tests__/sphere-of-influence-radius.spec.d.ts +2 -0
  50. package/dist/__tests__/sphere-of-influence-radius.spec.d.ts.map +1 -0
  51. package/dist/__tests__/sphere-of-influence-radius.spec.js +62 -0
  52. package/dist/__tests__/sphere-of-influence-radius.spec.js.map +1 -0
  53. package/dist/__tests__/vis-viva-speed.spec.js +1 -1
  54. package/dist/__tests__/vis-viva-speed.spec.js.map +1 -1
  55. package/dist/categories/gravity/acceleration-on1-by2.d.ts +1 -1
  56. package/dist/categories/gravity/acceleration-on1-by2.js +1 -1
  57. package/dist/categories/gravity/force-on1-by2.d.ts +2 -2
  58. package/dist/categories/gravity/force-on1-by2.js +2 -2
  59. package/dist/categories/gravity/gravitational-force.js +1 -1
  60. package/dist/categories/gravity/gravitational-force.js.map +1 -1
  61. package/dist/categories/gravity/gravitational-parameter.d.ts +1 -1
  62. package/dist/categories/gravity/gravitational-parameter.js +1 -1
  63. package/dist/categories/manoeuvres/gravity-assist-turning-angle.d.ts +36 -0
  64. package/dist/categories/manoeuvres/gravity-assist-turning-angle.d.ts.map +1 -0
  65. package/dist/categories/manoeuvres/gravity-assist-turning-angle.js +60 -0
  66. package/dist/categories/manoeuvres/gravity-assist-turning-angle.js.map +1 -0
  67. package/dist/categories/manoeuvres/hohmann-transfer.d.ts.map +1 -1
  68. package/dist/categories/manoeuvres/hohmann-transfer.js +2 -2
  69. package/dist/categories/manoeuvres/hohmann-transfer.js.map +1 -1
  70. package/dist/categories/manoeuvres/oberth-energy-gain.d.ts +3 -3
  71. package/dist/categories/manoeuvres/oberth-energy-gain.js +3 -3
  72. package/dist/categories/manoeuvres/plane-change-delta-v.d.ts +1 -1
  73. package/dist/categories/manoeuvres/plane-change-delta-v.js +1 -1
  74. package/dist/categories/orbits/characteristic-energy-c3.d.ts +32 -0
  75. package/dist/categories/orbits/characteristic-energy-c3.d.ts.map +1 -0
  76. package/dist/categories/orbits/characteristic-energy-c3.js +37 -0
  77. package/dist/categories/orbits/characteristic-energy-c3.js.map +1 -0
  78. package/dist/categories/orbits/circular-speed.d.ts +1 -1
  79. package/dist/categories/orbits/circular-speed.js +2 -2
  80. package/dist/categories/orbits/circular-speed.js.map +1 -1
  81. package/dist/categories/orbits/cw-hill-derivatives.d.ts +67 -0
  82. package/dist/categories/orbits/cw-hill-derivatives.d.ts.map +1 -0
  83. package/dist/categories/orbits/cw-hill-derivatives.js +89 -0
  84. package/dist/categories/orbits/cw-hill-derivatives.js.map +1 -0
  85. package/dist/categories/orbits/escape-speed.d.ts +1 -1
  86. package/dist/categories/orbits/escape-speed.js +2 -2
  87. package/dist/categories/orbits/escape-speed.js.map +1 -1
  88. package/dist/categories/orbits/hyperbolic-periapsis-speed.d.ts +34 -0
  89. package/dist/categories/orbits/hyperbolic-periapsis-speed.d.ts.map +1 -0
  90. package/dist/categories/orbits/hyperbolic-periapsis-speed.js +61 -0
  91. package/dist/categories/orbits/hyperbolic-periapsis-speed.js.map +1 -0
  92. package/dist/categories/orbits/kepler-period.d.ts +2 -2
  93. package/dist/categories/orbits/kepler-period.js +3 -3
  94. package/dist/categories/orbits/kepler-period.js.map +1 -1
  95. package/dist/categories/orbits/mean-motion.d.ts +37 -0
  96. package/dist/categories/orbits/mean-motion.d.ts.map +1 -0
  97. package/dist/categories/orbits/mean-motion.js +47 -0
  98. package/dist/categories/orbits/mean-motion.js.map +1 -0
  99. package/dist/categories/orbits/specific-angular-momentum-from-elements.d.ts +3 -3
  100. package/dist/categories/orbits/specific-angular-momentum-from-elements.js +4 -4
  101. package/dist/categories/orbits/specific-angular-momentum-from-elements.js.map +1 -1
  102. package/dist/categories/orbits/specific-angular-momentum.d.ts +1 -1
  103. package/dist/categories/orbits/specific-angular-momentum.js +2 -2
  104. package/dist/categories/orbits/specific-angular-momentum.js.map +1 -1
  105. package/dist/categories/orbits/specific-mechanical-energy.d.ts +1 -1
  106. package/dist/categories/orbits/specific-mechanical-energy.js +2 -2
  107. package/dist/categories/orbits/specific-mechanical-energy.js.map +1 -1
  108. package/dist/categories/orbits/sphere-of-influence-radius.d.ts +36 -0
  109. package/dist/categories/orbits/sphere-of-influence-radius.d.ts.map +1 -0
  110. package/dist/categories/orbits/sphere-of-influence-radius.js +56 -0
  111. package/dist/categories/orbits/sphere-of-influence-radius.js.map +1 -0
  112. package/dist/categories/orbits/vis-viva-speed.d.ts +1 -1
  113. package/dist/categories/orbits/vis-viva-speed.js +2 -2
  114. package/dist/categories/orbits/vis-viva-speed.js.map +1 -1
  115. package/dist/index.d.ts +6 -0
  116. package/dist/index.d.ts.map +1 -1
  117. package/dist/index.js +6 -0
  118. package/dist/index.js.map +1 -1
  119. package/package.json +1 -1
@@ -27,7 +27,7 @@
27
27
  * ```ts
28
28
  * // GEO: a ≈ 42,164 km → T ≈ 86,164 s (one sidereal day)
29
29
  * const a = 42164e3; // m
30
- * const muEarth = 3.986004418e14; // m^3/s^2
30
+ * const muEarth = 3.986004418e14; // m³/s²
31
31
  * const T = keplerPeriod(a, muEarth); // ≈ 86164 s
32
32
  * ```
33
33
  *
@@ -35,7 +35,7 @@
35
35
  * ```ts
36
36
  * // LEO-ish circular: a ≈ Earth radius + 400 km
37
37
  * const a = 6378e3 + 400e3; // m
38
- * const muEarth = 3.986004418e14; // m^3/s^2
38
+ * const muEarth = 3.986004418e14; // m³/s²
39
39
  * const T = keplerPeriod(a, muEarth); // ≈ 5550 s (~92.5 min)
40
40
  * ```
41
41
  *
@@ -27,7 +27,7 @@
27
27
  * ```ts
28
28
  * // GEO: a ≈ 42,164 km → T ≈ 86,164 s (one sidereal day)
29
29
  * const a = 42164e3; // m
30
- * const muEarth = 3.986004418e14; // m^3/s^2
30
+ * const muEarth = 3.986004418e14; // m³/s²
31
31
  * const T = keplerPeriod(a, muEarth); // ≈ 86164 s
32
32
  * ```
33
33
  *
@@ -35,7 +35,7 @@
35
35
  * ```ts
36
36
  * // LEO-ish circular: a ≈ Earth radius + 400 km
37
37
  * const a = 6378e3 + 400e3; // m
38
- * const muEarth = 3.986004418e14; // m^3/s^2
38
+ * const muEarth = 3.986004418e14; // m³/s²
39
39
  * const T = keplerPeriod(a, muEarth); // ≈ 5550 s (~92.5 min)
40
40
  * ```
41
41
  *
@@ -46,7 +46,7 @@ export const keplerPeriod = (a, mu) => {
46
46
  throw new Error('a must be a finite, positive number (meters).');
47
47
  }
48
48
  if (!Number.isFinite(mu) || mu <= 0) {
49
- throw new Error('mu must be a finite, positive number (m^3/s^2).');
49
+ throw new Error('mu must be a finite, positive number (m³/s²).');
50
50
  }
51
51
  const a3 = a * a * a; // a^3
52
52
  return 2 * Math.PI * Math.sqrt(a3 / mu);
@@ -1 +1 @@
1
- {"version":3,"file":"kepler-period.js","sourceRoot":"","sources":["../../../src/categories/orbits/kepler-period.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAS,EAAE,EAAU,EAAU,EAAE;IAC5D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;IAE5B,OAAO,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;AAC1C,CAAC,CAAC"}
1
+ {"version":3,"file":"kepler-period.js","sourceRoot":"","sources":["../../../src/categories/orbits/kepler-period.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAS,EAAE,EAAU,EAAU,EAAE;IAC5D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;IAE5B,OAAO,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;AAC1C,CAAC,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Compute **mean motion** for a (near-)circular reference orbit.
3
+ *
4
+ * Mean motion is the angular rate of the reference orbit:
5
+ *
6
+ * $$
7
+ * n=\sqrt{\frac{\mu}{a^3}}
8
+ * $$
9
+ *
10
+ * Where:
11
+ * - $ \mu $ is the standard gravitational parameter of the central body
12
+ * - $ a $ is the (circular) orbit radius / semi-major axis
13
+ *
14
+ * **Unit consistency**
15
+ * - If $ \mu $ is in **m³/s²**, then $ a $ must be in **m** and the result is in **rad/s**.
16
+ * - If $ \mu $ is in **km³/s²**, then $ a $ must be in **km** and the result is in **rad/s**.
17
+ *
18
+ * Common usage: reference rate for relative motion models (e.g., Clohessy–Wiltshire / Hill),
19
+ * orbital period estimates, and circular-orbit dynamics.
20
+ *
21
+ * @param mu - Standard gravitational parameter $ \mu $ (finite, > 0).
22
+ * @param a - Semi-major axis $ a $ (finite, > 0).
23
+ * @returns Mean motion $ n $ in **rad/s**.
24
+ * @throws {TypeError} If `mu` or `a` is not a finite number.
25
+ * @throws {RangeError} If `mu <= 0` or `a <= 0`.
26
+ * @group Orbits
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * // Earth example (km-based):
31
+ * const mu = 398600.4418; // km³/s²
32
+ * const a = 7000; // km
33
+ * const n = meanMotion(mu, a); // rad/s
34
+ * ```
35
+ */
36
+ export declare const meanMotion: (mu: number, a: number) => number;
37
+ //# sourceMappingURL=mean-motion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mean-motion.d.ts","sourceRoot":"","sources":["../../../src/categories/orbits/mean-motion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,eAAO,MAAM,UAAU,GAAI,IAAI,MAAM,EAAE,GAAG,MAAM,KAAG,MAYlD,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Compute **mean motion** for a (near-)circular reference orbit.
3
+ *
4
+ * Mean motion is the angular rate of the reference orbit:
5
+ *
6
+ * $$
7
+ * n=\sqrt{\frac{\mu}{a^3}}
8
+ * $$
9
+ *
10
+ * Where:
11
+ * - $ \mu $ is the standard gravitational parameter of the central body
12
+ * - $ a $ is the (circular) orbit radius / semi-major axis
13
+ *
14
+ * **Unit consistency**
15
+ * - If $ \mu $ is in **m³/s²**, then $ a $ must be in **m** and the result is in **rad/s**.
16
+ * - If $ \mu $ is in **km³/s²**, then $ a $ must be in **km** and the result is in **rad/s**.
17
+ *
18
+ * Common usage: reference rate for relative motion models (e.g., Clohessy–Wiltshire / Hill),
19
+ * orbital period estimates, and circular-orbit dynamics.
20
+ *
21
+ * @param mu - Standard gravitational parameter $ \mu $ (finite, > 0).
22
+ * @param a - Semi-major axis $ a $ (finite, > 0).
23
+ * @returns Mean motion $ n $ in **rad/s**.
24
+ * @throws {TypeError} If `mu` or `a` is not a finite number.
25
+ * @throws {RangeError} If `mu <= 0` or `a <= 0`.
26
+ * @group Orbits
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * // Earth example (km-based):
31
+ * const mu = 398600.4418; // km³/s²
32
+ * const a = 7000; // km
33
+ * const n = meanMotion(mu, a); // rad/s
34
+ * ```
35
+ */
36
+ export const meanMotion = (mu, a) => {
37
+ if (!Number.isFinite(mu))
38
+ throw new TypeError(`mu must be finite. Received: ${mu}`);
39
+ if (!Number.isFinite(a))
40
+ throw new TypeError(`a must be finite. Received: ${a}`);
41
+ if (mu <= 0)
42
+ throw new RangeError(`mu must be > 0. Received: ${mu}`);
43
+ if (a <= 0)
44
+ throw new RangeError(`a must be > 0. Received: ${a}`);
45
+ return Math.sqrt(mu / (a * a * a));
46
+ };
47
+ //# sourceMappingURL=mean-motion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mean-motion.js","sourceRoot":"","sources":["../../../src/categories/orbits/mean-motion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EAAU,EAAE,CAAS,EAAU,EAAE;IAC1D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,SAAS,CAAC,gCAAgC,EAAE,EAAE,CAAC,CAAC;IAE5D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QACrB,MAAM,IAAI,SAAS,CAAC,+BAA+B,CAAC,EAAE,CAAC,CAAC;IAE1D,IAAI,EAAE,IAAI,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,6BAA6B,EAAE,EAAE,CAAC,CAAC;IAErE,IAAI,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC;IAElE,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrC,CAAC,CAAC"}
@@ -33,12 +33,12 @@
33
33
  *
34
34
  * @throws {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error | Error}
35
35
  * If ($ a $) is non-finite or zero; if ($ e $) is non-finite or negative; if ($ \mu $) is non-finite or negative; or if
36
- * ($ \mu\,a\,(1-e^2) < 0 $) beyond a tiny FP tolerance (invalid element set for this formula).
36
+ * ($ \mu\,a\,(1-e²) < 0 $) beyond a tiny FP tolerance (invalid element set for this formula).
37
37
  *
38
38
  * @example
39
39
  * ```ts
40
40
  * // Near-circular LEO-like elements
41
- * const muEarth = 3.986004418e14; // m^3/s^2
41
+ * const muEarth = 3.986004418e14; // m³/s²
42
42
  * const a = 6778e3; // m
43
43
  * const e = 0.001;
44
44
  * const h = specificAngularMomentumFromElements(a, e, muEarth); // ≈ sqrt(μ a)
@@ -47,7 +47,7 @@
47
47
  * @example
48
48
  * ```ts
49
49
  * // Hyperbolic flyby example
50
- * const muEarth = 3.986004418e14; // m^3/s^2
50
+ * const muEarth = 3.986004418e14; // m³/s²
51
51
  * const a = -50000e3; // m (negative for hyperbola)
52
52
  * const e = 1.2;
53
53
  * const h = specificAngularMomentumFromElements(a, e, muEarth);
@@ -33,12 +33,12 @@
33
33
  *
34
34
  * @throws {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error | Error}
35
35
  * If ($ a $) is non-finite or zero; if ($ e $) is non-finite or negative; if ($ \mu $) is non-finite or negative; or if
36
- * ($ \mu\,a\,(1-e^2) < 0 $) beyond a tiny FP tolerance (invalid element set for this formula).
36
+ * ($ \mu\,a\,(1-e²) < 0 $) beyond a tiny FP tolerance (invalid element set for this formula).
37
37
  *
38
38
  * @example
39
39
  * ```ts
40
40
  * // Near-circular LEO-like elements
41
- * const muEarth = 3.986004418e14; // m^3/s^2
41
+ * const muEarth = 3.986004418e14; // m³/s²
42
42
  * const a = 6778e3; // m
43
43
  * const e = 0.001;
44
44
  * const h = specificAngularMomentumFromElements(a, e, muEarth); // ≈ sqrt(μ a)
@@ -47,7 +47,7 @@
47
47
  * @example
48
48
  * ```ts
49
49
  * // Hyperbolic flyby example
50
- * const muEarth = 3.986004418e14; // m^3/s^2
50
+ * const muEarth = 3.986004418e14; // m³/s²
51
51
  * const a = -50000e3; // m (negative for hyperbola)
52
52
  * const e = 1.2;
53
53
  * const h = specificAngularMomentumFromElements(a, e, muEarth);
@@ -62,7 +62,7 @@ export const specificAngularMomentumFromElements = (a, e, mu) => {
62
62
  if (!Number.isFinite(e) || e < 0)
63
63
  throw new Error('e must be finite and ≥ 0.');
64
64
  if (!Number.isFinite(mu) || mu < 0)
65
- throw new Error('mu must be finite and ≥ 0 (m^3/s^2).');
65
+ throw new Error('mu must be finite and ≥ 0 (m³/s²).');
66
66
  const radicand = mu * a * (1 - e * e);
67
67
  if (radicand < 0) {
68
68
  // Allow tiny negatives due to FP cancellation
@@ -1 +1 @@
1
- {"version":3,"file":"specific-angular-momentum-from-elements.js","sourceRoot":"","sources":["../../../src/categories/orbits/specific-angular-momentum-from-elements.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAAG,CACjD,CAAS,EACT,CAAS,EACT,EAAU,EACF,EAAE;IACV,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAE7D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAE/C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAE1D,MAAM,QAAQ,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAEtC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACjB,8CAA8C;QAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAE/C,IAAI,QAAQ,GAAG,CAAC,GAAG;YAAE,OAAO,CAAC,CAAC;QAE9B,MAAM,IAAI,KAAK,CACb,qDAAqD,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAC5E,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC7B,CAAC,CAAC"}
1
+ {"version":3,"file":"specific-angular-momentum-from-elements.js","sourceRoot":"","sources":["../../../src/categories/orbits/specific-angular-momentum-from-elements.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAAG,CACjD,CAAS,EACT,CAAS,EACT,EAAU,EACF,EAAE;IACV,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAE7D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAE/C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAExD,MAAM,QAAQ,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAEtC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACjB,8CAA8C;QAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAE/C,IAAI,QAAQ,GAAG,CAAC,GAAG;YAAE,OAAO,CAAC,CAAC;QAE9B,MAAM,IAAI,KAAK,CACb,qDAAqD,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAC5E,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC7B,CAAC,CAAC"}
@@ -44,7 +44,7 @@ import { Vector3DTupleType } from '@interstellar-tools/types';
44
44
  * // LEO-like state: r ⟂ v
45
45
  * const r: [number, number, number] = [6778e3, 0, 0]; // m
46
46
  * const v: [number, number, number] = [0, 7.67e3, 0]; // m/s
47
- * const h = specificAngularMomentum(r, v); // ≈ 5.20e10 m^2/s
47
+ * const h = specificAngularMomentum(r, v); // ≈ 5.20e10 m²/s
48
48
  * ```
49
49
  *
50
50
  * @see {@link https://en.wikipedia.org/wiki/Specific_angular_momentum}
@@ -44,7 +44,7 @@
44
44
  * // LEO-like state: r ⟂ v
45
45
  * const r: [number, number, number] = [6778e3, 0, 0]; // m
46
46
  * const v: [number, number, number] = [0, 7.67e3, 0]; // m/s
47
- * const h = specificAngularMomentum(r, v); // ≈ 5.20e10 m^2/s
47
+ * const h = specificAngularMomentum(r, v); // ≈ 5.20e10 m²/s
48
48
  * ```
49
49
  *
50
50
  * @see {@link https://en.wikipedia.org/wiki/Specific_angular_momentum}
@@ -70,7 +70,7 @@ export const specificAngularMomentum = (r, v) => {
70
70
  const hx = r[1] * v[2] - r[2] * v[1];
71
71
  const hy = r[2] * v[0] - r[0] * v[2];
72
72
  const hz = r[0] * v[1] - r[1] * v[0];
73
- const h = Math.hypot(hx, hy, hz); // m^2/s
73
+ const h = Math.hypot(hx, hy, hz); // m²/s
74
74
  return h;
75
75
  };
76
76
  //# sourceMappingURL=specific-angular-momentum.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"specific-angular-momentum.js","sourceRoot":"","sources":["../../../src/categories/orbits/specific-angular-momentum.ts"],"names":[],"mappings":"AAEA,2BAA2B;AAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,0BAA0B;AAC1B,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,CAAoB,EACpB,CAAoB,EACZ,EAAE;IACV,kBAAkB;IAClB,KAAK,MAAM,CAAC,IAAI,CAAC;QACf,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IACzE,KAAK,MAAM,CAAC,IAAI,CAAC;QACf,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAEtE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnD,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAE/D,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAE1D,aAAa;IACb,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ;IAE1C,OAAO,CAAC,CAAC;AACX,CAAC,CAAC"}
1
+ {"version":3,"file":"specific-angular-momentum.js","sourceRoot":"","sources":["../../../src/categories/orbits/specific-angular-momentum.ts"],"names":[],"mappings":"AAEA,2BAA2B;AAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,0BAA0B;AAC1B,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,CAAoB,EACpB,CAAoB,EACZ,EAAE;IACV,kBAAkB;IAClB,KAAK,MAAM,CAAC,IAAI,CAAC;QACf,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IACzE,KAAK,MAAM,CAAC,IAAI,CAAC;QACf,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAEtE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnD,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAE/D,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAE1D,aAAa;IACb,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO;IAEzC,OAAO,CAAC,CAAC;AACX,CAAC,CAAC"}
@@ -37,7 +37,7 @@
37
37
  * @example
38
38
  * ```ts
39
39
  * // LEO example around Earth (~400 km altitude)
40
- * const muEarth = 3.986004418e14; // m^3/s^2
40
+ * const muEarth = 3.986004418e14; // m³/s²
41
41
  * const r = 6378e3 + 400e3; // Earth radius + 400 km
42
42
  * const v = Math.sqrt(muEarth / r); // near-circular speed
43
43
  * const eps = specificMechanicalEnergy(v, r, muEarth);
@@ -37,7 +37,7 @@
37
37
  * @example
38
38
  * ```ts
39
39
  * // LEO example around Earth (~400 km altitude)
40
- * const muEarth = 3.986004418e14; // m^3/s^2
40
+ * const muEarth = 3.986004418e14; // m³/s²
41
41
  * const r = 6378e3 + 400e3; // Earth radius + 400 km
42
42
  * const v = Math.sqrt(muEarth / r); // near-circular speed
43
43
  * const eps = specificMechanicalEnergy(v, r, muEarth);
@@ -51,7 +51,7 @@ export const specificMechanicalEnergy = (v, r, mu) => {
51
51
  if (!Number.isFinite(r) || r <= 0)
52
52
  throw new Error('r must be a finite, positive number (m).');
53
53
  if (!Number.isFinite(mu) || mu < 0)
54
- throw new Error('mu must be a finite, non-negative number (m^3/s^2).');
54
+ throw new Error('mu must be a finite, non-negative number (m³/s²).');
55
55
  return 0.5 * v * v - mu / r;
56
56
  };
57
57
  //# sourceMappingURL=specific-mechanical-energy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"specific-mechanical-energy.js","sourceRoot":"","sources":["../../../src/categories/orbits/specific-mechanical-energy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,CAAS,EACT,CAAS,EACT,EAAU,EACF,EAAE;IACV,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IAEpE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAE9D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IAEzE,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAC9B,CAAC,CAAC"}
1
+ {"version":3,"file":"specific-mechanical-energy.js","sourceRoot":"","sources":["../../../src/categories/orbits/specific-mechanical-energy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,CAAS,EACT,CAAS,EACT,EAAU,EACF,EAAE;IACV,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IAEpE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAE9D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IAEvE,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAC9B,CAAC,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Compute **sphere of influence** radius (patched conics approximation).
3
+ *
4
+ * Equation:
5
+ * $$
6
+ * r_{\text{SOI}} \approx a \left(\frac{m}{M}\right)^{2/5}
7
+ * $$
8
+ *
9
+ * Where:
10
+ * - `a` is the semi-major axis of the secondary body's orbit about the primary (m or km)
11
+ * - `m` is the mass of the secondary body (e.g., planet) (kg)
12
+ * - `M` is the mass of the primary body (e.g., Sun) (kg)
13
+ *
14
+ * Units:
15
+ * - Output `rSOI` has the same distance unit as `a` (since the mass ratio is dimensionless).
16
+ *
17
+ * @param {number} a Semi-major axis `a` of the secondary around the primary (finite, > 0).
18
+ * @param {number} m Mass of the secondary body `m` (finite, > 0).
19
+ * @param {number} M Mass of the primary body `M` (finite, > 0).
20
+ * @returns {number} Sphere of influence radius `rSOI` in the same distance units as `a`.
21
+ * @throws {TypeError} If any input is not finite.
22
+ * @throws {RangeError} If `a <= 0`, `m <= 0`, or `M <= 0`.
23
+ * @group Orbits
24
+ *
25
+ * @example
26
+ * ```ts
27
+ * // Example (Earth around Sun; km-based a):
28
+ * const aKm = 149_597_870.7; // km
29
+ * const mEarth = 5.972e24; // kg
30
+ * const mSun = 1.9885e30; // kg
31
+ *
32
+ * const rSoiKm = sphereOfInfluenceRadius(aKm, mEarth, mSun);
33
+ * ```
34
+ */
35
+ export declare const sphereOfInfluenceRadius: (a: number, m: number, M: number) => number;
36
+ //# sourceMappingURL=sphere-of-influence-radius.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sphere-of-influence-radius.d.ts","sourceRoot":"","sources":["../../../src/categories/orbits/sphere-of-influence-radius.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,eAAO,MAAM,uBAAuB,GAClC,GAAG,MAAM,EACT,GAAG,MAAM,EACT,GAAG,MAAM,KACR,MA0BF,CAAC"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Compute **sphere of influence** radius (patched conics approximation).
3
+ *
4
+ * Equation:
5
+ * $$
6
+ * r_{\text{SOI}} \approx a \left(\frac{m}{M}\right)^{2/5}
7
+ * $$
8
+ *
9
+ * Where:
10
+ * - `a` is the semi-major axis of the secondary body's orbit about the primary (m or km)
11
+ * - `m` is the mass of the secondary body (e.g., planet) (kg)
12
+ * - `M` is the mass of the primary body (e.g., Sun) (kg)
13
+ *
14
+ * Units:
15
+ * - Output `rSOI` has the same distance unit as `a` (since the mass ratio is dimensionless).
16
+ *
17
+ * @param {number} a Semi-major axis `a` of the secondary around the primary (finite, > 0).
18
+ * @param {number} m Mass of the secondary body `m` (finite, > 0).
19
+ * @param {number} M Mass of the primary body `M` (finite, > 0).
20
+ * @returns {number} Sphere of influence radius `rSOI` in the same distance units as `a`.
21
+ * @throws {TypeError} If any input is not finite.
22
+ * @throws {RangeError} If `a <= 0`, `m <= 0`, or `M <= 0`.
23
+ * @group Orbits
24
+ *
25
+ * @example
26
+ * ```ts
27
+ * // Example (Earth around Sun; km-based a):
28
+ * const aKm = 149_597_870.7; // km
29
+ * const mEarth = 5.972e24; // kg
30
+ * const mSun = 1.9885e30; // kg
31
+ *
32
+ * const rSoiKm = sphereOfInfluenceRadius(aKm, mEarth, mSun);
33
+ * ```
34
+ */
35
+ export const sphereOfInfluenceRadius = (a, m, M) => {
36
+ if (!Number.isFinite(a)) {
37
+ throw new TypeError(`a must be a finite number. Received: ${a}`);
38
+ }
39
+ if (!Number.isFinite(m)) {
40
+ throw new TypeError(`m must be a finite number. Received: ${m}`);
41
+ }
42
+ if (!Number.isFinite(M)) {
43
+ throw new TypeError(`M must be a finite number. Received: ${M}`);
44
+ }
45
+ if (a <= 0) {
46
+ throw new RangeError(`a must be > 0. Received: ${a}`);
47
+ }
48
+ if (m <= 0) {
49
+ throw new RangeError(`m must be > 0. Received: ${m}`);
50
+ }
51
+ if (M <= 0) {
52
+ throw new RangeError(`M must be > 0. Received: ${M}`);
53
+ }
54
+ return a * Math.pow(m / M, 2 / 5);
55
+ };
56
+ //# sourceMappingURL=sphere-of-influence-radius.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sphere-of-influence-radius.js","sourceRoot":"","sources":["../../../src/categories/orbits/sphere-of-influence-radius.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,CAAS,EACT,CAAS,EACT,CAAS,EACD,EAAE;IACV,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,UAAU,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,UAAU,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,UAAU,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC,CAAC"}
@@ -31,7 +31,7 @@
31
31
  * @example
32
32
  * ```ts
33
33
  * // LEO (~400 km): a ≈ r for near-circular
34
- * const muEarth = 3.986004418e14; // m^3/s^2
34
+ * const muEarth = 3.986004418e14; // m³/s²
35
35
  * const r = 6378e3 + 400e3; // m
36
36
  * const a = r; // circular
37
37
  * const v = visVivaSpeed(r, a, muEarth); // ≈ 7670 m/s
@@ -31,7 +31,7 @@
31
31
  * @example
32
32
  * ```ts
33
33
  * // LEO (~400 km): a ≈ r for near-circular
34
- * const muEarth = 3.986004418e14; // m^3/s^2
34
+ * const muEarth = 3.986004418e14; // m³/s²
35
35
  * const r = 6378e3 + 400e3; // m
36
36
  * const a = r; // circular
37
37
  * const v = visVivaSpeed(r, a, muEarth); // ≈ 7670 m/s
@@ -43,7 +43,7 @@ export const visVivaSpeed = (r, a, mu) => {
43
43
  throw new Error('r must be a finite, positive number (m).');
44
44
  }
45
45
  if (!Number.isFinite(mu) || mu < 0) {
46
- throw new Error('mu must be a finite, non-negative number (m^3/s^2).');
46
+ throw new Error('mu must be a finite, non-negative number (m³/s²).');
47
47
  }
48
48
  if (!Number.isFinite(a)) {
49
49
  // Allow Infinity (parabolic); disallow NaN/-Infinity for clarity
@@ -1 +1 @@
1
- {"version":3,"file":"vis-viva-speed.js","sourceRoot":"","sources":["../../../src/categories/orbits/vis-viva-speed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAU,EAAU,EAAE;IACvE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACxB,iEAAiE;QACjE,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;YACnB,kBAAkB;YAClB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACjC,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,gDAAgD;IACpE,MAAM,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IAErC,oEAAoE;IACpE,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACjB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAEvC,IAAI,QAAQ,GAAG,CAAC,GAAG;YAAE,OAAO,CAAC,CAAC,CAAC,yBAAyB;QAExD,MAAM,IAAI,KAAK,CACb,uCAAuC,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAC9D,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC7B,CAAC,CAAC"}
1
+ {"version":3,"file":"vis-viva-speed.js","sourceRoot":"","sources":["../../../src/categories/orbits/vis-viva-speed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAU,EAAU,EAAE;IACvE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACxB,iEAAiE;QACjE,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;YACnB,kBAAkB;YAClB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACjC,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,gDAAgD;IACpE,MAAM,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IAErC,oEAAoE;IACpE,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACjB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAEvC,IAAI,QAAQ,GAAG,CAAC,GAAG;YAAE,OAAO,CAAC,CAAC,CAAC,yBAAyB;QAExD,MAAM,IAAI,KAAK,CACb,uCAAuC,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAC9D,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC7B,CAAC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -16,15 +16,21 @@ export * from './categories/gravity/acceleration-on1-by2';
16
16
  export * from './categories/gravity/force-on1-by2';
17
17
  export * from './categories/gravity/gravitational-force';
18
18
  export * from './categories/gravity/gravitational-parameter';
19
+ export * from './categories/orbits/characteristic-energy-c3';
19
20
  export * from './categories/orbits/circular-speed';
21
+ export * from './categories/orbits/cw-hill-derivatives';
20
22
  export * from './categories/orbits/escape-speed';
21
23
  export * from './categories/orbits/flight-path-angle-from-true-anomaly';
24
+ export * from './categories/orbits/hyperbolic-periapsis-speed';
22
25
  export * from './categories/orbits/kepler-period';
26
+ export * from './categories/orbits/mean-motion';
23
27
  export * from './categories/orbits/specific-angular-momentum-from-elements';
24
28
  export * from './categories/orbits/specific-angular-momentum';
25
29
  export * from './categories/orbits/specific-mechanical-energy';
30
+ export * from './categories/orbits/sphere-of-influence-radius';
26
31
  export * from './categories/orbits/vis-viva-speed';
27
32
  export * from './categories/manoeuvres/combine-burns-delta-v';
33
+ export * from './categories/manoeuvres/gravity-assist-turning-angle';
28
34
  export * from './categories/manoeuvres/hohmann-transfer';
29
35
  export * from './categories/manoeuvres/oberth-energy-gain';
30
36
  export * from './categories/manoeuvres/plane-change-delta-v';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,kCAAkC,CAAC;AAEjD,cAAc,+BAA+B,CAAC;AAI9C,cAAc,kDAAkD,CAAC;AAEjE,cAAc,kDAAkD,CAAC;AAEjE,cAAc,6CAA6C,CAAC;AAI5D,cAAc,4CAA4C,CAAC;AAE3D,cAAc,oDAAoD,CAAC;AAEnE,cAAc,iDAAiD,CAAC;AAEhE,cAAc,kCAAkC,CAAC;AAIjD,cAAc,2CAA2C,CAAC;AAE1D,cAAc,oCAAoC,CAAC;AAEnD,cAAc,0CAA0C,CAAC;AAEzD,cAAc,8CAA8C,CAAC;AAI7D,cAAc,oCAAoC,CAAC;AAEnD,cAAc,kCAAkC,CAAC;AAEjD,cAAc,yDAAyD,CAAC;AAExE,cAAc,mCAAmC,CAAC;AAElD,cAAc,6DAA6D,CAAC;AAE5E,cAAc,+CAA+C,CAAC;AAE9D,cAAc,gDAAgD,CAAC;AAE/D,cAAc,oCAAoC,CAAC;AAInD,cAAc,+CAA+C,CAAC;AAE9D,cAAc,0CAA0C,CAAC;AAEzD,cAAc,4CAA4C,CAAC;AAE3D,cAAc,8CAA8C,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,kCAAkC,CAAC;AAEjD,cAAc,+BAA+B,CAAC;AAI9C,cAAc,kDAAkD,CAAC;AAEjE,cAAc,kDAAkD,CAAC;AAEjE,cAAc,6CAA6C,CAAC;AAI5D,cAAc,4CAA4C,CAAC;AAE3D,cAAc,oDAAoD,CAAC;AAEnE,cAAc,iDAAiD,CAAC;AAEhE,cAAc,kCAAkC,CAAC;AAIjD,cAAc,2CAA2C,CAAC;AAE1D,cAAc,oCAAoC,CAAC;AAEnD,cAAc,0CAA0C,CAAC;AAEzD,cAAc,8CAA8C,CAAC;AAI7D,cAAc,8CAA8C,CAAC;AAE7D,cAAc,oCAAoC,CAAC;AAEnD,cAAc,yCAAyC,CAAC;AAExD,cAAc,kCAAkC,CAAC;AAEjD,cAAc,yDAAyD,CAAC;AAExE,cAAc,gDAAgD,CAAC;AAE/D,cAAc,mCAAmC,CAAC;AAElD,cAAc,iCAAiC,CAAC;AAEhD,cAAc,6DAA6D,CAAC;AAE5E,cAAc,+CAA+C,CAAC;AAE9D,cAAc,gDAAgD,CAAC;AAE/D,cAAc,gDAAgD,CAAC;AAE/D,cAAc,oCAAoC,CAAC;AAInD,cAAc,+CAA+C,CAAC;AAE9D,cAAc,sDAAsD,CAAC;AAErE,cAAc,0CAA0C,CAAC;AAEzD,cAAc,4CAA4C,CAAC;AAE3D,cAAc,8CAA8C,CAAC"}
package/dist/index.js CHANGED
@@ -21,16 +21,22 @@ export * from './categories/gravity/force-on1-by2';
21
21
  export * from './categories/gravity/gravitational-force';
22
22
  export * from './categories/gravity/gravitational-parameter';
23
23
  // categories/orbits
24
+ export * from './categories/orbits/characteristic-energy-c3';
24
25
  export * from './categories/orbits/circular-speed';
26
+ export * from './categories/orbits/cw-hill-derivatives';
25
27
  export * from './categories/orbits/escape-speed';
26
28
  export * from './categories/orbits/flight-path-angle-from-true-anomaly';
29
+ export * from './categories/orbits/hyperbolic-periapsis-speed';
27
30
  export * from './categories/orbits/kepler-period';
31
+ export * from './categories/orbits/mean-motion';
28
32
  export * from './categories/orbits/specific-angular-momentum-from-elements';
29
33
  export * from './categories/orbits/specific-angular-momentum';
30
34
  export * from './categories/orbits/specific-mechanical-energy';
35
+ export * from './categories/orbits/sphere-of-influence-radius';
31
36
  export * from './categories/orbits/vis-viva-speed';
32
37
  // categories/manoeuvres
33
38
  export * from './categories/manoeuvres/combine-burns-delta-v';
39
+ export * from './categories/manoeuvres/gravity-assist-turning-angle';
34
40
  export * from './categories/manoeuvres/hohmann-transfer';
35
41
  export * from './categories/manoeuvres/oberth-energy-gain';
36
42
  export * from './categories/manoeuvres/plane-change-delta-v';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,mBAAmB;AACnB,cAAc,kCAAkC,CAAC;AAEjD,cAAc,+BAA+B,CAAC;AAE9C,uBAAuB;AAEvB,cAAc,kDAAkD,CAAC;AAEjE,cAAc,kDAAkD,CAAC;AAEjE,cAAc,6CAA6C,CAAC;AAE5D,8BAA8B;AAE9B,cAAc,4CAA4C,CAAC;AAE3D,cAAc,oDAAoD,CAAC;AAEnE,cAAc,iDAAiD,CAAC;AAEhE,cAAc,kCAAkC,CAAC;AAEjD,qBAAqB;AAErB,cAAc,2CAA2C,CAAC;AAE1D,cAAc,oCAAoC,CAAC;AAEnD,cAAc,0CAA0C,CAAC;AAEzD,cAAc,8CAA8C,CAAC;AAE7D,oBAAoB;AAEpB,cAAc,oCAAoC,CAAC;AAEnD,cAAc,kCAAkC,CAAC;AAEjD,cAAc,yDAAyD,CAAC;AAExE,cAAc,mCAAmC,CAAC;AAElD,cAAc,6DAA6D,CAAC;AAE5E,cAAc,+CAA+C,CAAC;AAE9D,cAAc,gDAAgD,CAAC;AAE/D,cAAc,oCAAoC,CAAC;AAEnD,wBAAwB;AAExB,cAAc,+CAA+C,CAAC;AAE9D,cAAc,0CAA0C,CAAC;AAEzD,cAAc,4CAA4C,CAAC;AAE3D,cAAc,8CAA8C,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,mBAAmB;AACnB,cAAc,kCAAkC,CAAC;AAEjD,cAAc,+BAA+B,CAAC;AAE9C,uBAAuB;AAEvB,cAAc,kDAAkD,CAAC;AAEjE,cAAc,kDAAkD,CAAC;AAEjE,cAAc,6CAA6C,CAAC;AAE5D,8BAA8B;AAE9B,cAAc,4CAA4C,CAAC;AAE3D,cAAc,oDAAoD,CAAC;AAEnE,cAAc,iDAAiD,CAAC;AAEhE,cAAc,kCAAkC,CAAC;AAEjD,qBAAqB;AAErB,cAAc,2CAA2C,CAAC;AAE1D,cAAc,oCAAoC,CAAC;AAEnD,cAAc,0CAA0C,CAAC;AAEzD,cAAc,8CAA8C,CAAC;AAE7D,oBAAoB;AAEpB,cAAc,8CAA8C,CAAC;AAE7D,cAAc,oCAAoC,CAAC;AAEnD,cAAc,yCAAyC,CAAC;AAExD,cAAc,kCAAkC,CAAC;AAEjD,cAAc,yDAAyD,CAAC;AAExE,cAAc,gDAAgD,CAAC;AAE/D,cAAc,mCAAmC,CAAC;AAElD,cAAc,iCAAiC,CAAC;AAEhD,cAAc,6DAA6D,CAAC;AAE5E,cAAc,+CAA+C,CAAC;AAE9D,cAAc,gDAAgD,CAAC;AAE/D,cAAc,gDAAgD,CAAC;AAE/D,cAAc,oCAAoC,CAAC;AAEnD,wBAAwB;AAExB,cAAc,+CAA+C,CAAC;AAE9D,cAAc,sDAAsD,CAAC;AAErE,cAAc,0CAA0C,CAAC;AAEzD,cAAc,4CAA4C,CAAC;AAE3D,cAAc,8CAA8C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@interstellar-tools/equations",
3
- "version": "0.15.0",
3
+ "version": "0.16.0",
4
4
  "description": "Curated, well-tested orbital mechanics and dynamics formulas (e.g., Newtonian gravity, vis-viva, Kepler's 3rd law, escape/circular speeds, specific energy, specific angular momentum, peri/apoapsis radii).",
5
5
  "keywords": [
6
6
  "interstellar",