@interstellar-tools/equations 0.18.0 → 0.20.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 (364) hide show
  1. package/dist/__tests__/helpers/index.d.ts +3 -9
  2. package/dist/__tests__/helpers/index.d.ts.map +1 -1
  3. package/dist/__tests__/helpers/index.js +15 -21
  4. package/dist/__tests__/helpers/index.js.map +1 -1
  5. package/dist/categories/angle/__tests__/compute-angle.int.spec.d.ts.map +1 -0
  6. package/dist/{__tests__ → categories/angle/__tests__}/compute-angle.int.spec.js +2 -2
  7. package/dist/categories/angle/__tests__/compute-angle.int.spec.js.map +1 -0
  8. package/dist/categories/angle/__tests__/wrap-angle.spec.d.ts.map +1 -0
  9. package/dist/{__tests__ → categories/angle/__tests__}/wrap-angle.spec.js +1 -1
  10. package/dist/categories/angle/__tests__/wrap-angle.spec.js.map +1 -0
  11. package/dist/categories/anomalies/__tests__/eccentric-to-true-anomaly.spec.d.ts.map +1 -0
  12. package/dist/{__tests__ → categories/anomalies/__tests__}/eccentric-to-true-anomaly.spec.js +1 -1
  13. package/dist/categories/anomalies/__tests__/eccentric-to-true-anomaly.spec.js.map +1 -0
  14. package/dist/categories/anomalies/__tests__/mean-to-eccentric-anomaly.spec.d.ts.map +1 -0
  15. package/dist/{__tests__ → categories/anomalies/__tests__}/mean-to-eccentric-anomaly.spec.js +3 -3
  16. package/dist/categories/anomalies/__tests__/mean-to-eccentric-anomaly.spec.js.map +1 -0
  17. package/dist/categories/anomalies/__tests__/true-to-mean-anomaly.spec.d.ts.map +1 -0
  18. package/dist/{__tests__ → categories/anomalies/__tests__}/true-to-mean-anomaly.spec.js +2 -2
  19. package/dist/categories/anomalies/__tests__/true-to-mean-anomaly.spec.js.map +1 -0
  20. package/dist/categories/anomalies/eccentric-to-true-anomaly.d.ts +1 -1
  21. package/dist/categories/anomalies/eccentric-to-true-anomaly.d.ts.map +1 -1
  22. package/dist/categories/anomalies/true-to-mean-anomaly.d.ts +1 -1
  23. package/dist/categories/anomalies/true-to-mean-anomaly.d.ts.map +1 -1
  24. package/dist/categories/cartography/__tests__/body-fixed-from-inertial-dcm-iau.int.spec.d.ts +2 -0
  25. package/dist/categories/cartography/__tests__/body-fixed-from-inertial-dcm-iau.int.spec.d.ts.map +1 -0
  26. package/dist/categories/cartography/__tests__/body-fixed-from-inertial-dcm-iau.int.spec.js +56 -0
  27. package/dist/categories/cartography/__tests__/body-fixed-from-inertial-dcm-iau.int.spec.js.map +1 -0
  28. package/dist/categories/cartography/__tests__/eccentricity-squared-oblate-spheroid.spec.d.ts +2 -0
  29. package/dist/categories/cartography/__tests__/eccentricity-squared-oblate-spheroid.spec.d.ts.map +1 -0
  30. package/dist/categories/cartography/__tests__/eccentricity-squared-oblate-spheroid.spec.js +60 -0
  31. package/dist/categories/cartography/__tests__/eccentricity-squared-oblate-spheroid.spec.js.map +1 -0
  32. package/dist/categories/cartography/__tests__/flattening-oblate-spheroid.spec.d.ts +2 -0
  33. package/dist/categories/cartography/__tests__/flattening-oblate-spheroid.spec.d.ts.map +1 -0
  34. package/dist/categories/cartography/__tests__/flattening-oblate-spheroid.spec.js +60 -0
  35. package/dist/categories/cartography/__tests__/flattening-oblate-spheroid.spec.js.map +1 -0
  36. package/dist/categories/cartography/__tests__/is-on-triaxial-ellipsoid-surface.spec.d.ts +2 -0
  37. package/dist/categories/cartography/__tests__/is-on-triaxial-ellipsoid-surface.spec.d.ts.map +1 -0
  38. package/dist/categories/cartography/__tests__/is-on-triaxial-ellipsoid-surface.spec.js +73 -0
  39. package/dist/categories/cartography/__tests__/is-on-triaxial-ellipsoid-surface.spec.js.map +1 -0
  40. package/dist/categories/cartography/__tests__/planetocentric-latitude.spec.d.ts +2 -0
  41. package/dist/categories/cartography/__tests__/planetocentric-latitude.spec.d.ts.map +1 -0
  42. package/dist/categories/cartography/__tests__/planetocentric-latitude.spec.js +69 -0
  43. package/dist/categories/cartography/__tests__/planetocentric-latitude.spec.js.map +1 -0
  44. package/dist/categories/cartography/__tests__/planetographic-latitude-oblate.spec.d.ts +2 -0
  45. package/dist/categories/cartography/__tests__/planetographic-latitude-oblate.spec.d.ts.map +1 -0
  46. package/dist/categories/cartography/__tests__/planetographic-latitude-oblate.spec.js +103 -0
  47. package/dist/categories/cartography/__tests__/planetographic-latitude-oblate.spec.js.map +1 -0
  48. package/dist/categories/cartography/body-fixed-from-inertial-dcm-iau.d.ts +50 -0
  49. package/dist/categories/cartography/body-fixed-from-inertial-dcm-iau.d.ts.map +1 -0
  50. package/dist/categories/cartography/body-fixed-from-inertial-dcm-iau.js +64 -0
  51. package/dist/categories/cartography/body-fixed-from-inertial-dcm-iau.js.map +1 -0
  52. package/dist/categories/cartography/eccentricity-squared-oblate-spheroid.d.ts +40 -0
  53. package/dist/categories/cartography/eccentricity-squared-oblate-spheroid.d.ts.map +1 -0
  54. package/dist/categories/cartography/eccentricity-squared-oblate-spheroid.js +50 -0
  55. package/dist/categories/cartography/eccentricity-squared-oblate-spheroid.js.map +1 -0
  56. package/dist/categories/cartography/flattening-oblate-spheroid.d.ts +40 -0
  57. package/dist/categories/cartography/flattening-oblate-spheroid.d.ts.map +1 -0
  58. package/dist/categories/cartography/flattening-oblate-spheroid.js +50 -0
  59. package/dist/categories/cartography/flattening-oblate-spheroid.js.map +1 -0
  60. package/dist/categories/cartography/is-on-triaxial-ellipsoid-surface.d.ts +54 -0
  61. package/dist/categories/cartography/is-on-triaxial-ellipsoid-surface.d.ts.map +1 -0
  62. package/dist/categories/cartography/is-on-triaxial-ellipsoid-surface.js +77 -0
  63. package/dist/categories/cartography/is-on-triaxial-ellipsoid-surface.js.map +1 -0
  64. package/dist/categories/cartography/planetocentric-latitude.d.ts +38 -0
  65. package/dist/categories/cartography/planetocentric-latitude.d.ts.map +1 -0
  66. package/dist/categories/cartography/planetocentric-latitude.js +47 -0
  67. package/dist/categories/cartography/planetocentric-latitude.js.map +1 -0
  68. package/dist/categories/cartography/planetographic-latitude-oblate.d.ts +19 -0
  69. package/dist/categories/cartography/planetographic-latitude-oblate.d.ts.map +1 -0
  70. package/dist/categories/cartography/planetographic-latitude-oblate.js +44 -0
  71. package/dist/categories/cartography/planetographic-latitude-oblate.js.map +1 -0
  72. package/dist/categories/gravity/__tests__/gravitational-acceleration-on1-by2.int.spec.d.ts.map +1 -0
  73. package/dist/{__tests__ → categories/gravity/__tests__}/gravitational-acceleration-on1-by2.int.spec.js +3 -2
  74. package/dist/categories/gravity/__tests__/gravitational-acceleration-on1-by2.int.spec.js.map +1 -0
  75. package/dist/categories/gravity/__tests__/gravitational-force-on1-by2.int.spec.d.ts.map +1 -0
  76. package/dist/{__tests__ → categories/gravity/__tests__}/gravitational-force-on1-by2.int.spec.js +3 -2
  77. package/dist/categories/gravity/__tests__/gravitational-force-on1-by2.int.spec.js.map +1 -0
  78. package/dist/categories/gravity/__tests__/gravitational-force.spec.d.ts.map +1 -0
  79. package/dist/{__tests__ → categories/gravity/__tests__}/gravitational-force.spec.js +3 -2
  80. package/dist/categories/gravity/__tests__/gravitational-force.spec.js.map +1 -0
  81. package/dist/categories/gravity/__tests__/gravitational-parameters.spec.d.ts.map +1 -0
  82. package/dist/{__tests__ → categories/gravity/__tests__}/gravitational-parameters.spec.js +2 -2
  83. package/dist/categories/gravity/__tests__/gravitational-parameters.spec.js.map +1 -0
  84. package/dist/categories/helpers/__tests__/apply-matrix-3.spec.d.ts +2 -0
  85. package/dist/categories/helpers/__tests__/apply-matrix-3.spec.d.ts.map +1 -0
  86. package/dist/categories/helpers/__tests__/apply-matrix-3.spec.js +79 -0
  87. package/dist/categories/helpers/__tests__/apply-matrix-3.spec.js.map +1 -0
  88. package/dist/categories/helpers/__tests__/det-3.spec.d.ts +2 -0
  89. package/dist/categories/helpers/__tests__/det-3.spec.d.ts.map +1 -0
  90. package/dist/categories/helpers/__tests__/det-3.spec.js +73 -0
  91. package/dist/categories/helpers/__tests__/det-3.spec.js.map +1 -0
  92. package/dist/categories/helpers/__tests__/mat-mul3.spec.d.ts +2 -0
  93. package/dist/categories/helpers/__tests__/mat-mul3.spec.d.ts.map +1 -0
  94. package/dist/categories/helpers/__tests__/mat-mul3.spec.js +86 -0
  95. package/dist/categories/helpers/__tests__/mat-mul3.spec.js.map +1 -0
  96. package/dist/categories/helpers/__tests__/misc.spec.d.ts +2 -0
  97. package/dist/categories/helpers/__tests__/misc.spec.d.ts.map +1 -0
  98. package/dist/categories/helpers/__tests__/misc.spec.js +101 -0
  99. package/dist/categories/helpers/__tests__/misc.spec.js.map +1 -0
  100. package/dist/categories/helpers/__tests__/radians.spec.d.ts +2 -0
  101. package/dist/categories/helpers/__tests__/radians.spec.d.ts.map +1 -0
  102. package/dist/categories/helpers/__tests__/radians.spec.js +37 -0
  103. package/dist/categories/helpers/__tests__/radians.spec.js.map +1 -0
  104. package/dist/categories/helpers/__tests__/rot-1.spec.d.ts +2 -0
  105. package/dist/categories/helpers/__tests__/rot-1.spec.d.ts.map +1 -0
  106. package/dist/categories/helpers/__tests__/rot-1.spec.js +59 -0
  107. package/dist/categories/helpers/__tests__/rot-1.spec.js.map +1 -0
  108. package/dist/categories/helpers/__tests__/rot-3.spec.d.ts +2 -0
  109. package/dist/categories/helpers/__tests__/rot-3.spec.d.ts.map +1 -0
  110. package/dist/categories/helpers/__tests__/rot-3.spec.js +65 -0
  111. package/dist/categories/helpers/__tests__/rot-3.spec.js.map +1 -0
  112. package/dist/categories/helpers/apply-matrix-3.d.ts +38 -0
  113. package/dist/categories/helpers/apply-matrix-3.d.ts.map +1 -0
  114. package/dist/categories/helpers/apply-matrix-3.js +44 -0
  115. package/dist/categories/helpers/apply-matrix-3.js.map +1 -0
  116. package/dist/categories/helpers/det-3.d.ts +52 -0
  117. package/dist/categories/helpers/det-3.d.ts.map +1 -0
  118. package/dist/categories/helpers/det-3.js +62 -0
  119. package/dist/categories/helpers/det-3.js.map +1 -0
  120. package/dist/categories/helpers/mat-mul3.d.ts +46 -0
  121. package/dist/categories/helpers/mat-mul3.d.ts.map +1 -0
  122. package/dist/categories/helpers/mat-mul3.js +52 -0
  123. package/dist/categories/helpers/mat-mul3.js.map +1 -0
  124. package/dist/categories/helpers/misc.d.ts +118 -0
  125. package/dist/categories/helpers/misc.d.ts.map +1 -0
  126. package/dist/categories/helpers/misc.js +131 -0
  127. package/dist/categories/helpers/misc.js.map +1 -0
  128. package/dist/categories/helpers/radians.d.ts +41 -0
  129. package/dist/categories/helpers/radians.d.ts.map +1 -0
  130. package/dist/categories/helpers/radians.js +40 -0
  131. package/dist/categories/helpers/radians.js.map +1 -0
  132. package/dist/categories/helpers/rot-1.d.ts +38 -0
  133. package/dist/categories/helpers/rot-1.d.ts.map +1 -0
  134. package/dist/categories/helpers/rot-1.js +47 -0
  135. package/dist/categories/helpers/rot-1.js.map +1 -0
  136. package/dist/categories/helpers/rot-3.d.ts +38 -0
  137. package/dist/categories/helpers/rot-3.d.ts.map +1 -0
  138. package/dist/categories/helpers/rot-3.js +47 -0
  139. package/dist/categories/helpers/rot-3.js.map +1 -0
  140. package/dist/categories/helpers/transpose-3.d.ts +51 -0
  141. package/dist/categories/helpers/transpose-3.d.ts.map +1 -0
  142. package/dist/categories/helpers/transpose-3.js +54 -0
  143. package/dist/categories/helpers/transpose-3.js.map +1 -0
  144. package/dist/categories/kepler/__tests__/solve-kepler-bisection.spec.d.ts.map +1 -0
  145. package/dist/{__tests__ → categories/kepler/__tests__}/solve-kepler-bisection.spec.js +3 -2
  146. package/dist/categories/kepler/__tests__/solve-kepler-bisection.spec.js.map +1 -0
  147. package/dist/categories/kepler/__tests__/solve-kepler-high-eccentricity.spec.d.ts.map +1 -0
  148. package/dist/{__tests__ → categories/kepler/__tests__}/solve-kepler-high-eccentricity.spec.js +1 -1
  149. package/dist/categories/kepler/__tests__/solve-kepler-high-eccentricity.spec.js.map +1 -0
  150. package/dist/categories/kepler/__tests__/solve-kepler-newton-raphson.spec.d.ts.map +1 -0
  151. package/dist/{__tests__ → categories/kepler/__tests__}/solve-kepler-newton-raphson.spec.js +1 -1
  152. package/dist/categories/kepler/__tests__/solve-kepler-newton-raphson.spec.js.map +1 -0
  153. package/dist/categories/kepler/__tests__/solve-kepler.int.spec.d.ts.map +1 -0
  154. package/dist/{__tests__ → categories/kepler/__tests__}/solve-kepler.int.spec.js +1 -1
  155. package/dist/categories/kepler/__tests__/solve-kepler.int.spec.js.map +1 -0
  156. package/dist/categories/kepler/solve-kepler-bisection.d.ts +1 -1
  157. package/dist/categories/kepler/solve-kepler-bisection.d.ts.map +1 -1
  158. package/dist/categories/kepler/solve-kepler-high-eccentricity.d.ts +1 -1
  159. package/dist/categories/kepler/solve-kepler-high-eccentricity.d.ts.map +1 -1
  160. package/dist/categories/kepler/solve-kepler-newton-raphson.d.ts +1 -1
  161. package/dist/categories/kepler/solve-kepler-newton-raphson.d.ts.map +1 -1
  162. package/dist/categories/kepler/solve-kepler-newton-raphson.js +1 -1
  163. package/dist/categories/kepler/solve-kepler.d.ts +1 -1
  164. package/dist/categories/kepler/solve-kepler.d.ts.map +1 -1
  165. package/dist/categories/manoeuvres/__tests__/combine-burns-delta-v.spec.d.ts.map +1 -0
  166. package/dist/{__tests__ → categories/manoeuvres/__tests__}/combine-burns-delta-v.spec.js +3 -2
  167. package/dist/categories/manoeuvres/__tests__/combine-burns-delta-v.spec.js.map +1 -0
  168. package/dist/categories/manoeuvres/__tests__/gravity-assist-turning-angle.spec.d.ts.map +1 -0
  169. package/dist/{__tests__ → categories/manoeuvres/__tests__}/gravity-assist-turning-angle.spec.js +2 -2
  170. package/dist/categories/manoeuvres/__tests__/gravity-assist-turning-angle.spec.js.map +1 -0
  171. package/dist/categories/manoeuvres/__tests__/hohmann-transfer.spec.d.ts.map +1 -0
  172. package/dist/{__tests__ → categories/manoeuvres/__tests__}/hohmann-transfer.spec.js +2 -2
  173. package/dist/categories/manoeuvres/__tests__/hohmann-transfer.spec.js.map +1 -0
  174. package/dist/categories/manoeuvres/__tests__/oberth-energy-gain.spec.d.ts.map +1 -0
  175. package/dist/{__tests__ → categories/manoeuvres/__tests__}/oberth-energy-gain.spec.js +2 -2
  176. package/dist/categories/manoeuvres/__tests__/oberth-energy-gain.spec.js.map +1 -0
  177. package/dist/categories/manoeuvres/__tests__/plane-change-delta-v.spec.d.ts.map +1 -0
  178. package/dist/{__tests__ → categories/manoeuvres/__tests__}/plane-change-delta-v.spec.js +3 -2
  179. package/dist/categories/manoeuvres/__tests__/plane-change-delta-v.spec.js.map +1 -0
  180. package/dist/categories/manoeuvres/__tests__/rocket-delta-v-from-isp.spec.d.ts +2 -0
  181. package/dist/categories/manoeuvres/__tests__/rocket-delta-v-from-isp.spec.d.ts.map +1 -0
  182. package/dist/categories/manoeuvres/__tests__/rocket-delta-v-from-isp.spec.js +84 -0
  183. package/dist/categories/manoeuvres/__tests__/rocket-delta-v-from-isp.spec.js.map +1 -0
  184. package/dist/categories/manoeuvres/__tests__/rocket-delta-v-from-ve.spec.d.ts +2 -0
  185. package/dist/categories/manoeuvres/__tests__/rocket-delta-v-from-ve.spec.d.ts.map +1 -0
  186. package/dist/categories/manoeuvres/__tests__/rocket-delta-v-from-ve.spec.js +65 -0
  187. package/dist/categories/manoeuvres/__tests__/rocket-delta-v-from-ve.spec.js.map +1 -0
  188. package/dist/categories/manoeuvres/rocket-delta-v-from-isp.d.ts +46 -0
  189. package/dist/categories/manoeuvres/rocket-delta-v-from-isp.d.ts.map +1 -0
  190. package/dist/categories/manoeuvres/rocket-delta-v-from-isp.js +67 -0
  191. package/dist/categories/manoeuvres/rocket-delta-v-from-isp.js.map +1 -0
  192. package/dist/categories/manoeuvres/rocket-delta-v-from-ve.d.ts +44 -0
  193. package/dist/categories/manoeuvres/rocket-delta-v-from-ve.d.ts.map +1 -0
  194. package/dist/categories/manoeuvres/rocket-delta-v-from-ve.js +62 -0
  195. package/dist/categories/manoeuvres/rocket-delta-v-from-ve.js.map +1 -0
  196. package/dist/categories/orbits/__tests__/atmospheric-drag-acceleration.spec.d.ts +2 -0
  197. package/dist/categories/orbits/__tests__/atmospheric-drag-acceleration.spec.d.ts.map +1 -0
  198. package/dist/categories/orbits/__tests__/atmospheric-drag-acceleration.spec.js +71 -0
  199. package/dist/categories/orbits/__tests__/atmospheric-drag-acceleration.spec.js.map +1 -0
  200. package/dist/categories/orbits/__tests__/characteristic-energy-c3.spec.d.ts.map +1 -0
  201. package/dist/{__tests__ → categories/orbits/__tests__}/characteristic-energy-c3.spec.js +2 -2
  202. package/dist/categories/orbits/__tests__/characteristic-energy-c3.spec.js.map +1 -0
  203. package/dist/categories/orbits/__tests__/circular-speed.spec.d.ts.map +1 -0
  204. package/dist/{__tests__ → categories/orbits/__tests__}/circular-speed.spec.js +2 -2
  205. package/dist/categories/orbits/__tests__/circular-speed.spec.js.map +1 -0
  206. package/dist/categories/orbits/__tests__/cw-hill-derivatives.spec.d.ts.map +1 -0
  207. package/dist/{__tests__ → categories/orbits/__tests__}/cw-hill-derivatives.spec.js +2 -2
  208. package/dist/categories/orbits/__tests__/cw-hill-derivatives.spec.js.map +1 -0
  209. package/dist/categories/orbits/__tests__/escape-speed.spec.d.ts.map +1 -0
  210. package/dist/{__tests__ → categories/orbits/__tests__}/escape-speed.spec.js +2 -2
  211. package/dist/categories/orbits/__tests__/escape-speed.spec.js.map +1 -0
  212. package/dist/categories/orbits/__tests__/flight-path-angle-from-true-anomaly.spec.d.ts.map +1 -0
  213. package/dist/{__tests__ → categories/orbits/__tests__}/flight-path-angle-from-true-anomaly.spec.js +2 -2
  214. package/dist/categories/orbits/__tests__/flight-path-angle-from-true-anomaly.spec.js.map +1 -0
  215. package/dist/categories/orbits/__tests__/hyperbolic-periapsis-speed.spec.d.ts.map +1 -0
  216. package/dist/{__tests__ → categories/orbits/__tests__}/hyperbolic-periapsis-speed.spec.js +2 -2
  217. package/dist/categories/orbits/__tests__/hyperbolic-periapsis-speed.spec.js.map +1 -0
  218. package/dist/categories/orbits/__tests__/j2-argument-of-perigee-rate.spec.d.ts +2 -0
  219. package/dist/categories/orbits/__tests__/j2-argument-of-perigee-rate.spec.d.ts.map +1 -0
  220. package/dist/categories/orbits/__tests__/j2-argument-of-perigee-rate.spec.js +104 -0
  221. package/dist/categories/orbits/__tests__/j2-argument-of-perigee-rate.spec.js.map +1 -0
  222. package/dist/categories/orbits/__tests__/j2-nodal-precession-rate.spec.d.ts +2 -0
  223. package/dist/categories/orbits/__tests__/j2-nodal-precession-rate.spec.d.ts.map +1 -0
  224. package/dist/categories/orbits/__tests__/j2-nodal-precession-rate.spec.js +99 -0
  225. package/dist/categories/orbits/__tests__/j2-nodal-precession-rate.spec.js.map +1 -0
  226. package/dist/categories/orbits/__tests__/kepler-period.spec.d.ts.map +1 -0
  227. package/dist/{__tests__ → categories/orbits/__tests__}/kepler-period.spec.js +2 -2
  228. package/dist/categories/orbits/__tests__/kepler-period.spec.js.map +1 -0
  229. package/dist/categories/orbits/__tests__/mean-motion.spec.d.ts.map +1 -0
  230. package/dist/{__tests__ → categories/orbits/__tests__}/mean-motion.spec.js +2 -2
  231. package/dist/categories/orbits/__tests__/mean-motion.spec.js.map +1 -0
  232. package/dist/categories/orbits/__tests__/peri-apoapsis-radii.spec.d.ts.map +1 -0
  233. package/dist/{__tests__ → categories/orbits/__tests__}/peri-apoapsis-radii.spec.js +2 -2
  234. package/dist/categories/orbits/__tests__/peri-apoapsis-radii.spec.js.map +1 -0
  235. package/dist/categories/orbits/__tests__/specific-angular-momentum-from-elements.spec.d.ts.map +1 -0
  236. package/dist/{__tests__ → categories/orbits/__tests__}/specific-angular-momentum-from-elements.spec.js +2 -2
  237. package/dist/categories/orbits/__tests__/specific-angular-momentum-from-elements.spec.js.map +1 -0
  238. package/dist/categories/orbits/__tests__/specific-angular-momentum.spec.d.ts.map +1 -0
  239. package/dist/{__tests__ → categories/orbits/__tests__}/specific-angular-momentum.spec.js +3 -2
  240. package/dist/categories/orbits/__tests__/specific-angular-momentum.spec.js.map +1 -0
  241. package/dist/categories/orbits/__tests__/specific-mechanical-energy.spec.d.ts.map +1 -0
  242. package/dist/{__tests__ → categories/orbits/__tests__}/specific-mechanical-energy.spec.js +2 -2
  243. package/dist/categories/orbits/__tests__/specific-mechanical-energy.spec.js.map +1 -0
  244. package/dist/categories/orbits/__tests__/sphere-of-influence-radius.spec.d.ts.map +1 -0
  245. package/dist/{__tests__ → categories/orbits/__tests__}/sphere-of-influence-radius.spec.js +2 -2
  246. package/dist/categories/orbits/__tests__/sphere-of-influence-radius.spec.js.map +1 -0
  247. package/dist/categories/orbits/__tests__/vis-viva-speed.spec.d.ts.map +1 -0
  248. package/dist/{__tests__ → categories/orbits/__tests__}/vis-viva-speed.spec.js +2 -2
  249. package/dist/categories/orbits/__tests__/vis-viva-speed.spec.js.map +1 -0
  250. package/dist/categories/orbits/atmospheric-drag-acceleration.d.ts +40 -0
  251. package/dist/categories/orbits/atmospheric-drag-acceleration.d.ts.map +1 -0
  252. package/dist/categories/orbits/atmospheric-drag-acceleration.js +63 -0
  253. package/dist/categories/orbits/atmospheric-drag-acceleration.js.map +1 -0
  254. package/dist/categories/orbits/flight-path-angle-from-true-anomaly.d.ts +1 -1
  255. package/dist/categories/orbits/flight-path-angle-from-true-anomaly.d.ts.map +1 -1
  256. package/dist/categories/orbits/j2-argument-of-perigee-rate.d.ts +53 -0
  257. package/dist/categories/orbits/j2-argument-of-perigee-rate.d.ts.map +1 -0
  258. package/dist/categories/orbits/j2-argument-of-perigee-rate.js +84 -0
  259. package/dist/categories/orbits/j2-argument-of-perigee-rate.js.map +1 -0
  260. package/dist/categories/orbits/j2-nodal-precession-rate.d.ts +52 -0
  261. package/dist/categories/orbits/j2-nodal-precession-rate.d.ts.map +1 -0
  262. package/dist/categories/orbits/j2-nodal-precession-rate.js +82 -0
  263. package/dist/categories/orbits/j2-nodal-precession-rate.js.map +1 -0
  264. package/dist/index.d.ts +18 -0
  265. package/dist/index.d.ts.map +1 -1
  266. package/dist/index.js +20 -0
  267. package/dist/index.js.map +1 -1
  268. package/package.json +1 -1
  269. package/dist/__tests__/characteristic-energy-c3.spec.d.ts.map +0 -1
  270. package/dist/__tests__/characteristic-energy-c3.spec.js.map +0 -1
  271. package/dist/__tests__/circular-speed.spec.d.ts.map +0 -1
  272. package/dist/__tests__/circular-speed.spec.js.map +0 -1
  273. package/dist/__tests__/combine-burns-delta-v.spec.d.ts.map +0 -1
  274. package/dist/__tests__/combine-burns-delta-v.spec.js.map +0 -1
  275. package/dist/__tests__/compute-angle.int.spec.d.ts.map +0 -1
  276. package/dist/__tests__/compute-angle.int.spec.js.map +0 -1
  277. package/dist/__tests__/cw-hill-derivatives.spec.d.ts.map +0 -1
  278. package/dist/__tests__/cw-hill-derivatives.spec.js.map +0 -1
  279. package/dist/__tests__/eccentric-to-true-anomaly.spec.d.ts.map +0 -1
  280. package/dist/__tests__/eccentric-to-true-anomaly.spec.js.map +0 -1
  281. package/dist/__tests__/escape-speed.spec.d.ts.map +0 -1
  282. package/dist/__tests__/escape-speed.spec.js.map +0 -1
  283. package/dist/__tests__/flight-path-angle-from-true-anomaly.spec.d.ts.map +0 -1
  284. package/dist/__tests__/flight-path-angle-from-true-anomaly.spec.js.map +0 -1
  285. package/dist/__tests__/gravitational-acceleration-on1-by2.int.spec.d.ts.map +0 -1
  286. package/dist/__tests__/gravitational-acceleration-on1-by2.int.spec.js.map +0 -1
  287. package/dist/__tests__/gravitational-force-on1-by2.int.spec.d.ts.map +0 -1
  288. package/dist/__tests__/gravitational-force-on1-by2.int.spec.js.map +0 -1
  289. package/dist/__tests__/gravitational-force.spec.d.ts.map +0 -1
  290. package/dist/__tests__/gravitational-force.spec.js.map +0 -1
  291. package/dist/__tests__/gravitational-parameters.spec.d.ts.map +0 -1
  292. package/dist/__tests__/gravitational-parameters.spec.js.map +0 -1
  293. package/dist/__tests__/gravity-assist-turning-angle.spec.d.ts.map +0 -1
  294. package/dist/__tests__/gravity-assist-turning-angle.spec.js.map +0 -1
  295. package/dist/__tests__/hohmann-transfer.spec.d.ts.map +0 -1
  296. package/dist/__tests__/hohmann-transfer.spec.js.map +0 -1
  297. package/dist/__tests__/hyperbolic-periapsis-speed.spec.d.ts.map +0 -1
  298. package/dist/__tests__/hyperbolic-periapsis-speed.spec.js.map +0 -1
  299. package/dist/__tests__/kepler-period.spec.d.ts.map +0 -1
  300. package/dist/__tests__/kepler-period.spec.js.map +0 -1
  301. package/dist/__tests__/mean-motion.spec.d.ts.map +0 -1
  302. package/dist/__tests__/mean-motion.spec.js.map +0 -1
  303. package/dist/__tests__/mean-to-eccentric-anomaly.spec.d.ts.map +0 -1
  304. package/dist/__tests__/mean-to-eccentric-anomaly.spec.js.map +0 -1
  305. package/dist/__tests__/oberth-energy-gain.spec.d.ts.map +0 -1
  306. package/dist/__tests__/oberth-energy-gain.spec.js.map +0 -1
  307. package/dist/__tests__/peri-apoapsis-radii.spec.d.ts.map +0 -1
  308. package/dist/__tests__/peri-apoapsis-radii.spec.js.map +0 -1
  309. package/dist/__tests__/plane-change-delta-v.spec.d.ts.map +0 -1
  310. package/dist/__tests__/plane-change-delta-v.spec.js.map +0 -1
  311. package/dist/__tests__/solve-kepler-bisection.spec.d.ts.map +0 -1
  312. package/dist/__tests__/solve-kepler-bisection.spec.js.map +0 -1
  313. package/dist/__tests__/solve-kepler-high-eccentricity.spec.d.ts.map +0 -1
  314. package/dist/__tests__/solve-kepler-high-eccentricity.spec.js.map +0 -1
  315. package/dist/__tests__/solve-kepler-newton-raphson.spec.d.ts.map +0 -1
  316. package/dist/__tests__/solve-kepler-newton-raphson.spec.js.map +0 -1
  317. package/dist/__tests__/solve-kepler.int.spec.d.ts.map +0 -1
  318. package/dist/__tests__/solve-kepler.int.spec.js.map +0 -1
  319. package/dist/__tests__/specific-angular-momentum-from-elements.spec.d.ts.map +0 -1
  320. package/dist/__tests__/specific-angular-momentum-from-elements.spec.js.map +0 -1
  321. package/dist/__tests__/specific-angular-momentum.spec.d.ts.map +0 -1
  322. package/dist/__tests__/specific-angular-momentum.spec.js.map +0 -1
  323. package/dist/__tests__/specific-mechanical-energy.spec.d.ts.map +0 -1
  324. package/dist/__tests__/specific-mechanical-energy.spec.js.map +0 -1
  325. package/dist/__tests__/sphere-of-influence-radius.spec.d.ts.map +0 -1
  326. package/dist/__tests__/sphere-of-influence-radius.spec.js.map +0 -1
  327. package/dist/__tests__/true-to-mean-anomaly.spec.d.ts.map +0 -1
  328. package/dist/__tests__/true-to-mean-anomaly.spec.js.map +0 -1
  329. package/dist/__tests__/vis-viva-speed.spec.d.ts.map +0 -1
  330. package/dist/__tests__/vis-viva-speed.spec.js.map +0 -1
  331. package/dist/__tests__/wrap-angle.spec.d.ts.map +0 -1
  332. package/dist/__tests__/wrap-angle.spec.js.map +0 -1
  333. /package/dist/{__tests__ → categories/angle/__tests__}/compute-angle.int.spec.d.ts +0 -0
  334. /package/dist/{__tests__ → categories/angle/__tests__}/wrap-angle.spec.d.ts +0 -0
  335. /package/dist/{__tests__ → categories/anomalies/__tests__}/eccentric-to-true-anomaly.spec.d.ts +0 -0
  336. /package/dist/{__tests__ → categories/anomalies/__tests__}/mean-to-eccentric-anomaly.spec.d.ts +0 -0
  337. /package/dist/{__tests__ → categories/anomalies/__tests__}/true-to-mean-anomaly.spec.d.ts +0 -0
  338. /package/dist/{__tests__ → categories/gravity/__tests__}/gravitational-acceleration-on1-by2.int.spec.d.ts +0 -0
  339. /package/dist/{__tests__ → categories/gravity/__tests__}/gravitational-force-on1-by2.int.spec.d.ts +0 -0
  340. /package/dist/{__tests__ → categories/gravity/__tests__}/gravitational-force.spec.d.ts +0 -0
  341. /package/dist/{__tests__ → categories/gravity/__tests__}/gravitational-parameters.spec.d.ts +0 -0
  342. /package/dist/{__tests__ → categories/kepler/__tests__}/solve-kepler-bisection.spec.d.ts +0 -0
  343. /package/dist/{__tests__ → categories/kepler/__tests__}/solve-kepler-high-eccentricity.spec.d.ts +0 -0
  344. /package/dist/{__tests__ → categories/kepler/__tests__}/solve-kepler-newton-raphson.spec.d.ts +0 -0
  345. /package/dist/{__tests__ → categories/kepler/__tests__}/solve-kepler.int.spec.d.ts +0 -0
  346. /package/dist/{__tests__ → categories/manoeuvres/__tests__}/combine-burns-delta-v.spec.d.ts +0 -0
  347. /package/dist/{__tests__ → categories/manoeuvres/__tests__}/gravity-assist-turning-angle.spec.d.ts +0 -0
  348. /package/dist/{__tests__ → categories/manoeuvres/__tests__}/hohmann-transfer.spec.d.ts +0 -0
  349. /package/dist/{__tests__ → categories/manoeuvres/__tests__}/oberth-energy-gain.spec.d.ts +0 -0
  350. /package/dist/{__tests__ → categories/manoeuvres/__tests__}/plane-change-delta-v.spec.d.ts +0 -0
  351. /package/dist/{__tests__ → categories/orbits/__tests__}/characteristic-energy-c3.spec.d.ts +0 -0
  352. /package/dist/{__tests__ → categories/orbits/__tests__}/circular-speed.spec.d.ts +0 -0
  353. /package/dist/{__tests__ → categories/orbits/__tests__}/cw-hill-derivatives.spec.d.ts +0 -0
  354. /package/dist/{__tests__ → categories/orbits/__tests__}/escape-speed.spec.d.ts +0 -0
  355. /package/dist/{__tests__ → categories/orbits/__tests__}/flight-path-angle-from-true-anomaly.spec.d.ts +0 -0
  356. /package/dist/{__tests__ → categories/orbits/__tests__}/hyperbolic-periapsis-speed.spec.d.ts +0 -0
  357. /package/dist/{__tests__ → categories/orbits/__tests__}/kepler-period.spec.d.ts +0 -0
  358. /package/dist/{__tests__ → categories/orbits/__tests__}/mean-motion.spec.d.ts +0 -0
  359. /package/dist/{__tests__ → categories/orbits/__tests__}/peri-apoapsis-radii.spec.d.ts +0 -0
  360. /package/dist/{__tests__ → categories/orbits/__tests__}/specific-angular-momentum-from-elements.spec.d.ts +0 -0
  361. /package/dist/{__tests__ → categories/orbits/__tests__}/specific-angular-momentum.spec.d.ts +0 -0
  362. /package/dist/{__tests__ → categories/orbits/__tests__}/specific-mechanical-energy.spec.d.ts +0 -0
  363. /package/dist/{__tests__ → categories/orbits/__tests__}/sphere-of-influence-radius.spec.d.ts +0 -0
  364. /package/dist/{__tests__ → categories/orbits/__tests__}/vis-viva-speed.spec.d.ts +0 -0
@@ -0,0 +1,86 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mat-mul3.spec.js","sourceRoot":"","sources":["../../../../src/categories/helpers/__tests__/mat-mul3.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=misc.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"misc.spec.d.ts","sourceRoot":"","sources":["../../../../src/categories/helpers/__tests__/misc.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,101 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"misc.spec.js","sourceRoot":"","sources":["../../../../src/categories/helpers/__tests__/misc.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=radians.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radians.spec.d.ts","sourceRoot":"","sources":["../../../../src/categories/helpers/__tests__/radians.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,37 @@
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 { rad, toRad } from '../radians';
5
+ describe('radians', () => {
6
+ /* ---------------------------------- toRad --------------------------------- */
7
+ test('toRad converts 180° to π', () => {
8
+ const x = toRad(180);
9
+ absClose(x, Math.PI, 1e-12);
10
+ });
11
+ test('toRad converts 90° to π/2', () => {
12
+ const x = toRad(90);
13
+ absClose(x, Math.PI / 2, 1e-12);
14
+ });
15
+ test('toRad converts -90° to -π/2', () => {
16
+ const x = toRad(-90);
17
+ absClose(x, -Math.PI / 2, 1e-12);
18
+ });
19
+ test('toRad is linear: toRad(a + b) = toRad(a) + toRad(b)', () => {
20
+ const a = 12.34;
21
+ const b = -56.78;
22
+ const left = toRad(a + b);
23
+ const right = (toRad(a) + toRad(b));
24
+ relClose(left, right);
25
+ });
26
+ /* ----------------------------------- rad ---------------------------------- */
27
+ test('rad is an identity at runtime (returns the same numeric value)', () => {
28
+ const x = 1.2345;
29
+ const y = rad(x);
30
+ assert.equal(y, x);
31
+ });
32
+ test('rad works with Math constants (π branded as Radians)', () => {
33
+ const x = rad(Math.PI);
34
+ absClose(x, Math.PI, 0);
35
+ });
36
+ });
37
+ //# sourceMappingURL=radians.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radians.spec.js","sourceRoot":"","sources":["../../../../src/categories/helpers/__tests__/radians.spec.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGxC,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,gFAAgF;IAEhF,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACpC,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACrB,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QACpB,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACrB,QAAQ,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC/D,MAAM,CAAC,GAAG,KAAK,CAAC;QAChB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QAEjB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1B,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAW,CAAC;QAE9C,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,gFAAgF;IAEhF,IAAI,CAAC,gEAAgE,EAAE,GAAG,EAAE;QAC1E,MAAM,CAAC,GAAG,MAAM,CAAC;QACjB,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAEjB,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAChE,MAAM,CAAC,GAAY,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=rot-1.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rot-1.spec.d.ts","sourceRoot":"","sources":["../../../../src/categories/helpers/__tests__/rot-1.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,59 @@
1
+ import assert from 'node:assert/strict';
2
+ import test, { describe } from 'node:test';
3
+ import { rot1 } from '../rot-1';
4
+ import { absClose, matRelClose } from 'packages/equations/src/__tests__/helpers';
5
+ import { applyMatrix3 } from '../apply-matrix-3';
6
+ import { matMul3 } from '../mat-mul3';
7
+ import { transpose3 } from '../transpose-3';
8
+ import { det3 } from '../det-3';
9
+ const I3 = [
10
+ [1, 0, 0],
11
+ [0, 1, 0],
12
+ [0, 0, 1]
13
+ ];
14
+ describe('rot1', () => {
15
+ test('returns identity at theta = 0', () => {
16
+ const R = rot1(0);
17
+ matRelClose(R, I3, 1e-12);
18
+ });
19
+ test('rotates Y to +Z by +90° about +X (right-handed active rotation)', () => {
20
+ const R = rot1((Math.PI / 2));
21
+ const yAxis = [0, 1, 0];
22
+ const out = applyMatrix3(R, yAxis);
23
+ // Expect [0, 0, 1]
24
+ absClose(out[0], 0, 1e-12);
25
+ absClose(out[1], 0, 1e-12);
26
+ absClose(out[2], 1, 1e-12);
27
+ });
28
+ test('rotates Z to -Y by +90° about +X', () => {
29
+ const R = rot1((Math.PI / 2));
30
+ const zAxis = [0, 0, 1];
31
+ const out = applyMatrix3(R, zAxis);
32
+ // Expect [0, -1, 0]
33
+ absClose(out[0], 0, 1e-12);
34
+ absClose(out[1], -1, 1e-12);
35
+ absClose(out[2], 0, 1e-12);
36
+ });
37
+ test('is orthonormal: RᵀR ≈ I', () => {
38
+ const R = rot1(1.234);
39
+ const RtR = matMul3(transpose3(R), R);
40
+ matRelClose(RtR, I3, 1e-12);
41
+ });
42
+ test('has determinant +1 (proper rotation)', () => {
43
+ const R = rot1(0.789);
44
+ absClose(det3(R), 1, 1e-12, `det(R) expected ~1`);
45
+ });
46
+ test('inverse equals rotation by -theta: R(theta) * R(-theta) ≈ I', () => {
47
+ const theta = 0.456;
48
+ const R = rot1(theta);
49
+ const Rinv = rot1(-0.456);
50
+ matRelClose(matMul3(R, Rinv), I3, 1e-12);
51
+ });
52
+ test('throws TypeError when theta is not finite', () => {
53
+ assert.throws(() => rot1(Number.NaN), (err) => err instanceof TypeError &&
54
+ err.message === 'theta must be finite. Received: NaN');
55
+ assert.throws(() => rot1(Number.POSITIVE_INFINITY), (err) => err instanceof TypeError &&
56
+ err.message === 'theta must be finite. Received: Infinity');
57
+ });
58
+ });
59
+ //# sourceMappingURL=rot-1.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rot-1.spec.js","sourceRoot":"","sources":["../../../../src/categories/helpers/__tests__/rot-1.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=rot-3.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rot-3.spec.d.ts","sourceRoot":"","sources":["../../../../src/categories/helpers/__tests__/rot-3.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,65 @@
1
+ import assert from 'node:assert/strict';
2
+ import test, { describe } from 'node:test';
3
+ import { rot3 } from '../rot-3';
4
+ import { absClose, matRelClose, relClose } from 'packages/equations/src/__tests__/helpers';
5
+ import { applyMatrix3 } from '../apply-matrix-3';
6
+ import { matMul3 } from '../mat-mul3';
7
+ import { det3 } from '../det-3';
8
+ import { transpose3 } from '../transpose-3';
9
+ const I3 = [
10
+ [1, 0, 0],
11
+ [0, 1, 0],
12
+ [0, 0, 1]
13
+ ];
14
+ describe('rot3', () => {
15
+ test('returns identity at theta = 0', () => {
16
+ const R = rot3(0);
17
+ matRelClose(R, I3, 1e-12);
18
+ });
19
+ test('rotates +X to +Y by +90° about +Z (right-handed active rotation)', () => {
20
+ const R = rot3((Math.PI / 2));
21
+ const xAxis = [1, 0, 0];
22
+ const out = applyMatrix3(R, xAxis);
23
+ // Expect [0, 1, 0]
24
+ absClose(out[0], 0, 1e-12);
25
+ absClose(out[1], 1, 1e-12);
26
+ absClose(out[2], 0, 1e-12);
27
+ });
28
+ test('rotates +Y to -X by +90° about +Z', () => {
29
+ const R = rot3((Math.PI / 2));
30
+ const yAxis = [0, 1, 0];
31
+ const out = applyMatrix3(R, yAxis);
32
+ // Expect [-1, 0, 0]
33
+ absClose(out[0], -1, 1e-12);
34
+ absClose(out[1], 0, 1e-12);
35
+ absClose(out[2], 0, 1e-12);
36
+ });
37
+ test('leaves Z component unchanged (rotation about Z)', () => {
38
+ const R = rot3(1.234);
39
+ const v = [1, 2, 3];
40
+ const out = applyMatrix3(R, v);
41
+ relClose(out[2], v[2]); // z unchanged
42
+ });
43
+ test('is orthonormal: RᵀR ≈ I', () => {
44
+ const R = rot3(2.345);
45
+ const RtR = matMul3(transpose3(R), R);
46
+ matRelClose(RtR, I3, 1e-12);
47
+ });
48
+ test('has determinant +1 (proper rotation)', () => {
49
+ const R = rot3(0.789);
50
+ absClose(det3(R), 1, 1e-12, `det(R) expected ~1`);
51
+ });
52
+ test('inverse equals rotation by -theta: R(theta) * R(-theta) ≈ I', () => {
53
+ const theta = 0.456;
54
+ const R = rot3(theta);
55
+ const Rinv = rot3(-0.456);
56
+ matRelClose(matMul3(R, Rinv), I3, 1e-12);
57
+ });
58
+ test('throws TypeError when theta is not finite', () => {
59
+ assert.throws(() => rot3(Number.NaN), (err) => err instanceof TypeError &&
60
+ err.message === 'theta must be finite. Received: NaN');
61
+ assert.throws(() => rot3(Number.POSITIVE_INFINITY), (err) => err instanceof TypeError &&
62
+ err.message === 'theta must be finite. Received: Infinity');
63
+ });
64
+ });
65
+ //# sourceMappingURL=rot-3.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rot-3.spec.js","sourceRoot":"","sources":["../../../../src/categories/helpers/__tests__/rot-3.spec.ts"],"names":[],"mappings":"AAKA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EACL,QAAQ,EACR,WAAW,EACX,QAAQ,EACT,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,MAAM,EAAE,GAAkB;IACxB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACT,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACT,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CACV,CAAC;AACF,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;IACpB,IAAI,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAY,CAAC,CAAC;QAC7B,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC5E,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAY,CAAC,CAAC;QAEzC,MAAM,KAAK,GAAsB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAEnC,mBAAmB;QACnB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAC3B,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAC3B,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAY,CAAC,CAAC;QAEzC,MAAM,KAAK,GAAsB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAEnC,oBAAoB;QACpB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC5B,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAC3B,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,iDAAiD,EAAE,GAAG,EAAE;QAC3D,MAAM,CAAC,GAAG,IAAI,CAAC,KAAgB,CAAC,CAAC;QAEjC,MAAM,CAAC,GAAsB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACvC,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAE/B,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc;IACxC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACnC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAgB,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACtC,WAAW,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAgB,CAAC,CAAC;QACjC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACvE,MAAM,KAAK,GAAG,KAAgB,CAAC;QAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,KAAgB,CAAC,CAAC;QAErC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAc,CAAC,EACjC,CAAC,GAAG,EAAE,EAAE,CACN,GAAG,YAAY,SAAS;YACxB,GAAG,CAAC,OAAO,KAAK,qCAAqC,CACxD,CAAC;QAEF,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,iBAA4B,CAAC,EAC/C,CAAC,GAAG,EAAE,EAAE,CACN,GAAG,YAAY,SAAS;YACxB,GAAG,CAAC,OAAO,KAAK,0CAA0C,CAC7D,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { Matrix3x3Type, Vector3DTupleType } from '@interstellar-tools/types';
2
+ /**
3
+ * Apply a **3×3 matrix** to a **3D vector** (matrix–vector multiplication).
4
+ *
5
+ * Computes:
6
+ * $$
7
+ * \mathbf{y} = \mathbf{M}\,\mathbf{v}
8
+ * $$
9
+ *
10
+ * With row-major indexing:
11
+ * - `M[row][col]`
12
+ * - `v = [x, y, z]`
13
+ *
14
+ * This is commonly used for:
15
+ * - Applying a **direction cosine matrix (DCM)** / rotation matrix to transform vectors
16
+ * between frames (e.g., inertial → body-fixed).
17
+ * - Small 3D linear transforms in geometry and mapping pipelines.
18
+ *
19
+ * @param M - 3×3 matrix (row-major) (all finite).
20
+ * @param v - 3D vector `[x, y, z]` (all finite).
21
+ * @returns The transformed vector `M * v` as a 3D tuple.
22
+ * @group Helpers
23
+ *
24
+ * @example
25
+ * ```ts
26
+ * const M: Matrix3x3Type = [
27
+ * [1, 0, 0],
28
+ * [0, 0, -1],
29
+ * [0, 1, 0]
30
+ * ];
31
+ *
32
+ * const v: Vector3DTupleType = [1, 2, 3];
33
+ * const out = applyMatrix3(M, v);
34
+ * // out === [1, -3, 2]
35
+ * ```
36
+ */
37
+ export declare const applyMatrix3: (M: Matrix3x3Type, v: Vector3DTupleType) => Vector3DTupleType;
38
+ //# sourceMappingURL=apply-matrix-3.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-matrix-3.d.ts","sourceRoot":"","sources":["../../../src/categories/helpers/apply-matrix-3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE7E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,eAAO,MAAM,YAAY,GACvB,GAAG,aAAa,EAChB,GAAG,iBAAiB,KACnB,iBAQF,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Apply a **3×3 matrix** to a **3D vector** (matrix–vector multiplication).
3
+ *
4
+ * Computes:
5
+ * $$
6
+ * \mathbf{y} = \mathbf{M}\,\mathbf{v}
7
+ * $$
8
+ *
9
+ * With row-major indexing:
10
+ * - `M[row][col]`
11
+ * - `v = [x, y, z]`
12
+ *
13
+ * This is commonly used for:
14
+ * - Applying a **direction cosine matrix (DCM)** / rotation matrix to transform vectors
15
+ * between frames (e.g., inertial → body-fixed).
16
+ * - Small 3D linear transforms in geometry and mapping pipelines.
17
+ *
18
+ * @param M - 3×3 matrix (row-major) (all finite).
19
+ * @param v - 3D vector `[x, y, z]` (all finite).
20
+ * @returns The transformed vector `M * v` as a 3D tuple.
21
+ * @group Helpers
22
+ *
23
+ * @example
24
+ * ```ts
25
+ * const M: Matrix3x3Type = [
26
+ * [1, 0, 0],
27
+ * [0, 0, -1],
28
+ * [0, 1, 0]
29
+ * ];
30
+ *
31
+ * const v: Vector3DTupleType = [1, 2, 3];
32
+ * const out = applyMatrix3(M, v);
33
+ * // out === [1, -3, 2]
34
+ * ```
35
+ */
36
+ export const applyMatrix3 = (M, v) => {
37
+ const [x, y, z] = v;
38
+ return [
39
+ M[0][0] * x + M[0][1] * y + M[0][2] * z,
40
+ M[1][0] * x + M[1][1] * y + M[1][2] * z,
41
+ M[2][0] * x + M[2][1] * y + M[2][2] * z
42
+ ];
43
+ };
44
+ //# sourceMappingURL=apply-matrix-3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-matrix-3.js","sourceRoot":"","sources":["../../../src/categories/helpers/apply-matrix-3.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,CAAgB,EAChB,CAAoB,EACD,EAAE;IACrB,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IAEpB,OAAO;QACL,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACvC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACvC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;KAC/B,CAAC;AACb,CAAC,CAAC"}
@@ -0,0 +1,52 @@
1
+ import type { Matrix3x3Type } from '@interstellar-tools/types';
2
+ /**
3
+ * Compute the **determinant** of a **3×3** matrix (row-major).
4
+ *
5
+ * For:
6
+ * $$
7
+ * \mathbf{A}=
8
+ * \begin{bmatrix}
9
+ * a & b & c \\
10
+ * d & e & f \\
11
+ * g & h & i
12
+ * \end{bmatrix}
13
+ * $$
14
+ *
15
+ * This returns:
16
+ * $$
17
+ * \det(\mathbf{A}) = a(ei - fh) - b(di - fg) + c(dh - eg)
18
+ * $$
19
+ *
20
+ * Notes:
21
+ * - Matrices are treated as **row-major**: `A[row][col]`.
22
+ * - For a proper rotation matrix / DCM, `det(A) ≈ +1`.
23
+ * - A determinant of `0` indicates the matrix is singular (non-invertible).
24
+ *
25
+ * @param A - 3×3 matrix (row-major).
26
+ * @returns Determinant `det(A)`.
27
+ * @group Helpers
28
+ *
29
+ * @example
30
+ * ```ts
31
+ * const I: Matrix3x3Type = [
32
+ * [1, 0, 0],
33
+ * [0, 1, 0],
34
+ * [0, 0, 1]
35
+ * ];
36
+ *
37
+ * det3(I); // 1
38
+ * ```
39
+ *
40
+ * @example
41
+ * ```ts
42
+ * const A: Matrix3x3Type = [
43
+ * [1, 2, 3],
44
+ * [0, 1, 4],
45
+ * [5, 6, 0]
46
+ * ];
47
+ *
48
+ * det3(A); // 1
49
+ * ```
50
+ */
51
+ export declare const det3: (A: Matrix3x3Type) => number;
52
+ //# sourceMappingURL=det-3.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"det-3.d.ts","sourceRoot":"","sources":["../../../src/categories/helpers/det-3.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,eAAO,MAAM,IAAI,GAAI,GAAG,aAAa,KAAG,MAYvC,CAAC"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Compute the **determinant** of a **3×3** matrix (row-major).
3
+ *
4
+ * For:
5
+ * $$
6
+ * \mathbf{A}=
7
+ * \begin{bmatrix}
8
+ * a & b & c \\
9
+ * d & e & f \\
10
+ * g & h & i
11
+ * \end{bmatrix}
12
+ * $$
13
+ *
14
+ * This returns:
15
+ * $$
16
+ * \det(\mathbf{A}) = a(ei - fh) - b(di - fg) + c(dh - eg)
17
+ * $$
18
+ *
19
+ * Notes:
20
+ * - Matrices are treated as **row-major**: `A[row][col]`.
21
+ * - For a proper rotation matrix / DCM, `det(A) ≈ +1`.
22
+ * - A determinant of `0` indicates the matrix is singular (non-invertible).
23
+ *
24
+ * @param A - 3×3 matrix (row-major).
25
+ * @returns Determinant `det(A)`.
26
+ * @group Helpers
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * const I: Matrix3x3Type = [
31
+ * [1, 0, 0],
32
+ * [0, 1, 0],
33
+ * [0, 0, 1]
34
+ * ];
35
+ *
36
+ * det3(I); // 1
37
+ * ```
38
+ *
39
+ * @example
40
+ * ```ts
41
+ * const A: Matrix3x3Type = [
42
+ * [1, 2, 3],
43
+ * [0, 1, 4],
44
+ * [5, 6, 0]
45
+ * ];
46
+ *
47
+ * det3(A); // 1
48
+ * ```
49
+ */
50
+ export const det3 = (A) => {
51
+ const a = A[0][0];
52
+ const b = A[0][1];
53
+ const c = A[0][2];
54
+ const d = A[1][0];
55
+ const e = A[1][1];
56
+ const f = A[1][2];
57
+ const g = A[2][0];
58
+ const h = A[2][1];
59
+ const i = A[2][2];
60
+ return a * (e * i - f * h) - b * (d * i - f * g) + c * (d * h - e * g);
61
+ };
62
+ //# sourceMappingURL=det-3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"det-3.js","sourceRoot":"","sources":["../../../src/categories/helpers/det-3.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAgB,EAAU,EAAE;IAC/C,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAElB,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACzE,CAAC,CAAC"}