@vived/core 1.2.2 → 1.2.4

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 (570) hide show
  1. package/dist/cjs/AppObject/AppObject.js +59 -0
  2. package/dist/cjs/AppObject/AppObject.js.map +1 -0
  3. package/dist/cjs/AppObject/AppObject.test.js +113 -0
  4. package/dist/cjs/AppObject/AppObject.test.js.map +1 -0
  5. package/dist/cjs/AppObject/AppObjectComponent.js +82 -0
  6. package/dist/cjs/AppObject/AppObjectComponent.js.map +1 -0
  7. package/dist/cjs/AppObject/AppObjectComponent.test.js +132 -0
  8. package/dist/cjs/AppObject/AppObjectComponent.test.js.map +1 -0
  9. package/dist/cjs/AppObject/AppObjectController.js +12 -0
  10. package/dist/cjs/AppObject/AppObjectController.js.map +1 -0
  11. package/dist/cjs/AppObject/AppObjectEntity.js +38 -0
  12. package/dist/cjs/AppObject/AppObjectEntity.js.map +1 -0
  13. package/dist/cjs/AppObject/AppObjectEntity.test.js +108 -0
  14. package/dist/cjs/AppObject/AppObjectEntity.test.js.map +1 -0
  15. package/dist/cjs/AppObject/AppObjectEntityRepo.js +56 -0
  16. package/dist/cjs/AppObject/AppObjectEntityRepo.js.map +1 -0
  17. package/dist/cjs/AppObject/AppObjectEntityRepo.test.js +149 -0
  18. package/dist/cjs/AppObject/AppObjectEntityRepo.test.js.map +1 -0
  19. package/dist/cjs/AppObject/AppObjectPM.js +40 -0
  20. package/dist/cjs/AppObject/AppObjectPM.js.map +1 -0
  21. package/dist/cjs/AppObject/AppObjectPM.test.js +103 -0
  22. package/dist/cjs/AppObject/AppObjectPM.test.js.map +1 -0
  23. package/dist/cjs/AppObject/AppObjectRepo.js +133 -0
  24. package/dist/cjs/AppObject/AppObjectRepo.js.map +1 -0
  25. package/dist/cjs/AppObject/AppObjectRepo.test.js +213 -0
  26. package/dist/cjs/AppObject/AppObjectRepo.test.js.map +1 -0
  27. package/dist/cjs/AppObject/AppObjectUC.js +12 -0
  28. package/dist/cjs/AppObject/AppObjectUC.js.map +1 -0
  29. package/dist/cjs/AppObject/AppObjectView.js +12 -0
  30. package/dist/cjs/AppObject/AppObjectView.js.map +1 -0
  31. package/dist/cjs/AppObject/getSingletonComponent.js +7 -0
  32. package/dist/cjs/AppObject/getSingletonComponent.js.map +1 -0
  33. package/dist/cjs/AppObject/getSingletonComponent.test.js +13 -0
  34. package/dist/cjs/AppObject/getSingletonComponent.test.js.map +1 -0
  35. package/dist/cjs/AppObject/index.js +27 -0
  36. package/dist/cjs/AppObject/index.js.map +1 -0
  37. package/dist/cjs/AppObject/printAppObjectDetails.js +18 -0
  38. package/dist/cjs/AppObject/printAppObjectDetails.js.map +1 -0
  39. package/dist/cjs/Entities/MemoizedAngle.js +23 -0
  40. package/dist/cjs/Entities/MemoizedAngle.js.map +1 -0
  41. package/dist/cjs/Entities/MemoizedAngle.test.js +30 -0
  42. package/dist/cjs/Entities/MemoizedAngle.test.js.map +1 -0
  43. package/dist/cjs/Entities/MemoizedBoolean.js +23 -0
  44. package/dist/cjs/Entities/MemoizedBoolean.js.map +1 -0
  45. package/dist/cjs/Entities/MemoizedBoolean.test.js +34 -0
  46. package/dist/cjs/Entities/MemoizedBoolean.test.js.map +1 -0
  47. package/dist/cjs/Entities/MemoizedColor.js +24 -0
  48. package/dist/cjs/Entities/MemoizedColor.js.map +1 -0
  49. package/dist/cjs/Entities/MemoizedColor.test.js +32 -0
  50. package/dist/cjs/Entities/MemoizedColor.test.js.map +1 -0
  51. package/dist/cjs/Entities/MemoizedNumber.js +23 -0
  52. package/dist/cjs/Entities/MemoizedNumber.js.map +1 -0
  53. package/dist/cjs/Entities/MemoizedNumber.test.js +29 -0
  54. package/dist/cjs/Entities/MemoizedNumber.test.js.map +1 -0
  55. package/dist/cjs/Entities/MemoizedQuaternion.js +24 -0
  56. package/dist/cjs/Entities/MemoizedQuaternion.js.map +1 -0
  57. package/dist/cjs/Entities/MemoizedQuaternion.test.js +32 -0
  58. package/dist/cjs/Entities/MemoizedQuaternion.test.js.map +1 -0
  59. package/dist/cjs/Entities/MemoizedString.js +23 -0
  60. package/dist/cjs/Entities/MemoizedString.js.map +1 -0
  61. package/dist/cjs/Entities/MemoizedString.test.js +29 -0
  62. package/dist/cjs/Entities/MemoizedString.test.js.map +1 -0
  63. package/dist/cjs/Entities/MemoizedVector2.js +24 -0
  64. package/dist/cjs/Entities/MemoizedVector2.js.map +1 -0
  65. package/dist/cjs/Entities/MemoizedVector2.test.js +32 -0
  66. package/dist/cjs/Entities/MemoizedVector2.test.js.map +1 -0
  67. package/dist/cjs/Entities/MemoizedVector3.js +24 -0
  68. package/dist/cjs/Entities/MemoizedVector3.js.map +1 -0
  69. package/dist/cjs/Entities/MemoizedVector3.test.js +32 -0
  70. package/dist/cjs/Entities/MemoizedVector3.test.js.map +1 -0
  71. package/dist/cjs/Entities/ObservableEntity.js +20 -0
  72. package/dist/cjs/Entities/ObservableEntity.js.map +1 -0
  73. package/dist/cjs/Entities/ObservableEntity.test.js +25 -0
  74. package/dist/cjs/Entities/ObservableEntity.test.js.map +1 -0
  75. package/dist/cjs/Entities/ObserverList.js +27 -0
  76. package/dist/cjs/Entities/ObserverList.js.map +1 -0
  77. package/dist/cjs/Entities/ObserverList.test.js +44 -0
  78. package/dist/cjs/Entities/ObserverList.test.js.map +1 -0
  79. package/dist/cjs/Entities/RangedNumber.js +36 -0
  80. package/dist/cjs/Entities/RangedNumber.js.map +1 -0
  81. package/dist/cjs/Entities/RangedNumber.test.js +96 -0
  82. package/dist/cjs/Entities/RangedNumber.test.js.map +1 -0
  83. package/dist/cjs/Entities/index.js +28 -0
  84. package/dist/cjs/Entities/index.js.map +1 -0
  85. package/dist/cjs/Types/AppBoundary.js +3 -0
  86. package/dist/cjs/Types/AppBoundary.js.map +1 -0
  87. package/dist/cjs/Types/EaseFn.js +3 -0
  88. package/dist/cjs/Types/EaseFn.js.map +1 -0
  89. package/dist/cjs/Types/PmAdapter.js +3 -0
  90. package/dist/cjs/Types/PmAdapter.js.map +1 -0
  91. package/dist/cjs/Types/SingletonPmAdapter.js +3 -0
  92. package/dist/cjs/Types/SingletonPmAdapter.js.map +1 -0
  93. package/dist/cjs/Types/index.js +21 -0
  94. package/dist/cjs/Types/index.js.map +1 -0
  95. package/dist/cjs/Utilities/LengthConverters.js +21 -0
  96. package/dist/cjs/Utilities/LengthConverters.js.map +1 -0
  97. package/dist/cjs/Utilities/LengthConverters.test.js +24 -0
  98. package/dist/cjs/Utilities/LengthConverters.test.js.map +1 -0
  99. package/dist/cjs/Utilities/LerpNumber.js +85 -0
  100. package/dist/cjs/Utilities/LerpNumber.js.map +1 -0
  101. package/dist/cjs/Utilities/LerpNumber.test.js +90 -0
  102. package/dist/cjs/Utilities/LerpNumber.test.js.map +1 -0
  103. package/dist/cjs/Utilities/degreesToRadians.js +7 -0
  104. package/dist/cjs/Utilities/degreesToRadians.js.map +1 -0
  105. package/dist/cjs/Utilities/degreesToRadians.test.js +9 -0
  106. package/dist/cjs/Utilities/degreesToRadians.test.js.map +1 -0
  107. package/dist/cjs/Utilities/easeFunctions.js +208 -0
  108. package/dist/cjs/Utilities/easeFunctions.js.map +1 -0
  109. package/dist/cjs/Utilities/easeFunctions.test.js +209 -0
  110. package/dist/cjs/Utilities/easeFunctions.test.js.map +1 -0
  111. package/dist/cjs/Utilities/generateUniqueID.js +8 -0
  112. package/dist/cjs/Utilities/generateUniqueID.js.map +1 -0
  113. package/dist/cjs/Utilities/index.js +22 -0
  114. package/dist/cjs/Utilities/index.js.map +1 -0
  115. package/dist/cjs/Utilities/interpolateNumber.js +18 -0
  116. package/dist/cjs/Utilities/interpolateNumber.js.map +1 -0
  117. package/dist/cjs/Utilities/interpolateNumber.test.js +26 -0
  118. package/dist/cjs/Utilities/interpolateNumber.test.js.map +1 -0
  119. package/dist/cjs/ValueObjects/Angle.js +47 -0
  120. package/dist/cjs/ValueObjects/Angle.js.map +1 -0
  121. package/dist/cjs/ValueObjects/Angle.test.js +28 -0
  122. package/dist/cjs/ValueObjects/Angle.test.js.map +1 -0
  123. package/dist/cjs/ValueObjects/Color.js +859 -0
  124. package/dist/cjs/ValueObjects/Color.js.map +1 -0
  125. package/dist/cjs/ValueObjects/Color.test.js +147 -0
  126. package/dist/cjs/ValueObjects/Color.test.js.map +1 -0
  127. package/dist/cjs/ValueObjects/LineSegment2D.js +72 -0
  128. package/dist/cjs/ValueObjects/LineSegment2D.js.map +1 -0
  129. package/dist/cjs/ValueObjects/LineSegment2D.test.js +102 -0
  130. package/dist/cjs/ValueObjects/LineSegment2D.test.js.map +1 -0
  131. package/dist/cjs/ValueObjects/Matrix.js +466 -0
  132. package/dist/cjs/ValueObjects/Matrix.js.map +1 -0
  133. package/dist/cjs/ValueObjects/Matrix.test.js +385 -0
  134. package/dist/cjs/ValueObjects/Matrix.test.js.map +1 -0
  135. package/dist/cjs/ValueObjects/ParametricLine.js +77 -0
  136. package/dist/cjs/ValueObjects/ParametricLine.js.map +1 -0
  137. package/dist/cjs/ValueObjects/ParametricLine.test.js +126 -0
  138. package/dist/cjs/ValueObjects/ParametricLine.test.js.map +1 -0
  139. package/dist/cjs/ValueObjects/ParametricPlane.js +65 -0
  140. package/dist/cjs/ValueObjects/ParametricPlane.js.map +1 -0
  141. package/dist/cjs/ValueObjects/ParametricPlane.test.js +101 -0
  142. package/dist/cjs/ValueObjects/ParametricPlane.test.js.map +1 -0
  143. package/dist/cjs/ValueObjects/Quaternion.js +290 -0
  144. package/dist/cjs/ValueObjects/Quaternion.js.map +1 -0
  145. package/dist/cjs/ValueObjects/Quaternion.test.js +240 -0
  146. package/dist/cjs/ValueObjects/Quaternion.test.js.map +1 -0
  147. package/dist/cjs/ValueObjects/Rectangle.js +24 -0
  148. package/dist/cjs/ValueObjects/Rectangle.js.map +1 -0
  149. package/dist/cjs/ValueObjects/Rectangle.test.js +32 -0
  150. package/dist/cjs/ValueObjects/Rectangle.test.js.map +1 -0
  151. package/dist/cjs/ValueObjects/Vector2.js +184 -0
  152. package/dist/cjs/ValueObjects/Vector2.js.map +1 -0
  153. package/dist/cjs/ValueObjects/Vector2.test.js +136 -0
  154. package/dist/cjs/ValueObjects/Vector2.test.js.map +1 -0
  155. package/dist/cjs/ValueObjects/Vector3.js +231 -0
  156. package/dist/cjs/ValueObjects/Vector3.js.map +1 -0
  157. package/dist/cjs/ValueObjects/Vector3.test.js +188 -0
  158. package/dist/cjs/ValueObjects/Vector3.test.js.map +1 -0
  159. package/dist/cjs/ValueObjects/index.js +27 -0
  160. package/dist/cjs/ValueObjects/index.js.map +1 -0
  161. package/dist/cjs/index.js +22 -0
  162. package/dist/cjs/index.js.map +1 -0
  163. package/dist/esm/AppObject/AppObject.js +54 -0
  164. package/dist/esm/AppObject/AppObject.js.map +1 -0
  165. package/dist/esm/AppObject/AppObject.test.js +110 -0
  166. package/dist/esm/AppObject/AppObject.test.js.map +1 -0
  167. package/dist/esm/AppObject/AppObjectComponent.js +78 -0
  168. package/dist/esm/AppObject/AppObjectComponent.js.map +1 -0
  169. package/dist/esm/AppObject/AppObjectComponent.test.js +130 -0
  170. package/dist/esm/AppObject/AppObjectComponent.test.js.map +1 -0
  171. package/dist/esm/AppObject/AppObjectController.js +8 -0
  172. package/dist/esm/AppObject/AppObjectController.js.map +1 -0
  173. package/dist/esm/AppObject/AppObjectEntity.js +34 -0
  174. package/dist/esm/AppObject/AppObjectEntity.js.map +1 -0
  175. package/dist/esm/AppObject/AppObjectEntity.test.js +106 -0
  176. package/dist/esm/AppObject/AppObjectEntity.test.js.map +1 -0
  177. package/dist/esm/AppObject/AppObjectEntityRepo.js +52 -0
  178. package/dist/esm/AppObject/AppObjectEntityRepo.js.map +1 -0
  179. package/dist/esm/AppObject/AppObjectEntityRepo.test.js +147 -0
  180. package/dist/esm/AppObject/AppObjectEntityRepo.test.js.map +1 -0
  181. package/dist/esm/AppObject/AppObjectPM.js +36 -0
  182. package/dist/esm/AppObject/AppObjectPM.js.map +1 -0
  183. package/dist/esm/AppObject/AppObjectPM.test.js +101 -0
  184. package/dist/esm/AppObject/AppObjectPM.test.js.map +1 -0
  185. package/dist/esm/AppObject/AppObjectRepo.js +128 -0
  186. package/dist/esm/AppObject/AppObjectRepo.js.map +1 -0
  187. package/dist/esm/AppObject/AppObjectRepo.test.js +211 -0
  188. package/dist/esm/AppObject/AppObjectRepo.test.js.map +1 -0
  189. package/dist/esm/AppObject/AppObjectUC.js +8 -0
  190. package/dist/esm/AppObject/AppObjectUC.js.map +1 -0
  191. package/dist/esm/AppObject/AppObjectView.js +8 -0
  192. package/dist/esm/AppObject/AppObjectView.js.map +1 -0
  193. package/dist/esm/AppObject/getSingletonComponent.js +4 -0
  194. package/dist/esm/AppObject/getSingletonComponent.js.map +1 -0
  195. package/dist/esm/AppObject/getSingletonComponent.test.js +11 -0
  196. package/dist/esm/AppObject/getSingletonComponent.test.js.map +1 -0
  197. package/dist/esm/AppObject/index.js +11 -0
  198. package/dist/esm/AppObject/index.js.map +1 -0
  199. package/dist/esm/AppObject/printAppObjectDetails.js +15 -0
  200. package/dist/esm/AppObject/printAppObjectDetails.js.map +1 -0
  201. package/dist/esm/Entities/MemoizedAngle.js +19 -0
  202. package/dist/esm/Entities/MemoizedAngle.js.map +1 -0
  203. package/dist/esm/Entities/MemoizedAngle.test.js +28 -0
  204. package/dist/esm/Entities/MemoizedAngle.test.js.map +1 -0
  205. package/dist/esm/Entities/MemoizedBoolean.js +19 -0
  206. package/dist/esm/Entities/MemoizedBoolean.js.map +1 -0
  207. package/dist/esm/Entities/MemoizedBoolean.test.js +32 -0
  208. package/dist/esm/Entities/MemoizedBoolean.test.js.map +1 -0
  209. package/dist/esm/Entities/MemoizedColor.js +20 -0
  210. package/dist/esm/Entities/MemoizedColor.js.map +1 -0
  211. package/dist/esm/Entities/MemoizedColor.test.js +30 -0
  212. package/dist/esm/Entities/MemoizedColor.test.js.map +1 -0
  213. package/dist/esm/Entities/MemoizedNumber.js +19 -0
  214. package/dist/esm/Entities/MemoizedNumber.js.map +1 -0
  215. package/dist/esm/Entities/MemoizedNumber.test.js +27 -0
  216. package/dist/esm/Entities/MemoizedNumber.test.js.map +1 -0
  217. package/dist/esm/Entities/MemoizedQuaternion.js +20 -0
  218. package/dist/esm/Entities/MemoizedQuaternion.js.map +1 -0
  219. package/dist/esm/Entities/MemoizedQuaternion.test.js +30 -0
  220. package/dist/esm/Entities/MemoizedQuaternion.test.js.map +1 -0
  221. package/dist/esm/Entities/MemoizedString.js +19 -0
  222. package/dist/esm/Entities/MemoizedString.js.map +1 -0
  223. package/dist/esm/Entities/MemoizedString.test.js +27 -0
  224. package/dist/esm/Entities/MemoizedString.test.js.map +1 -0
  225. package/dist/esm/Entities/MemoizedVector2.js +20 -0
  226. package/dist/esm/Entities/MemoizedVector2.js.map +1 -0
  227. package/dist/esm/Entities/MemoizedVector2.test.js +30 -0
  228. package/dist/esm/Entities/MemoizedVector2.test.js.map +1 -0
  229. package/dist/esm/Entities/MemoizedVector3.js +20 -0
  230. package/dist/esm/Entities/MemoizedVector3.js.map +1 -0
  231. package/dist/esm/Entities/MemoizedVector3.test.js +30 -0
  232. package/dist/esm/Entities/MemoizedVector3.test.js.map +1 -0
  233. package/dist/esm/Entities/ObservableEntity.js +16 -0
  234. package/dist/esm/Entities/ObservableEntity.js.map +1 -0
  235. package/dist/esm/Entities/ObservableEntity.test.js +23 -0
  236. package/dist/esm/Entities/ObservableEntity.test.js.map +1 -0
  237. package/dist/esm/Entities/ObserverList.js +23 -0
  238. package/dist/esm/Entities/ObserverList.js.map +1 -0
  239. package/dist/esm/Entities/ObserverList.test.js +42 -0
  240. package/dist/esm/Entities/ObserverList.test.js.map +1 -0
  241. package/dist/esm/Entities/RangedNumber.js +32 -0
  242. package/dist/esm/Entities/RangedNumber.js.map +1 -0
  243. package/dist/esm/Entities/RangedNumber.test.js +94 -0
  244. package/dist/esm/Entities/RangedNumber.test.js.map +1 -0
  245. package/{src/Entities/index.ts → dist/esm/Entities/index.js} +12 -11
  246. package/dist/esm/Entities/index.js.map +1 -0
  247. package/dist/esm/Types/AppBoundary.js +2 -0
  248. package/dist/esm/Types/AppBoundary.js.map +1 -0
  249. package/dist/esm/Types/EaseFn.js +2 -0
  250. package/dist/esm/Types/EaseFn.js.map +1 -0
  251. package/dist/esm/Types/PmAdapter.js +2 -0
  252. package/dist/esm/Types/PmAdapter.js.map +1 -0
  253. package/dist/esm/Types/SingletonPmAdapter.js +2 -0
  254. package/dist/esm/Types/SingletonPmAdapter.js.map +1 -0
  255. package/{src/Types/index.ts → dist/esm/Types/index.js} +5 -4
  256. package/dist/esm/Types/index.js.map +1 -0
  257. package/dist/esm/Utilities/LengthConverters.js +15 -0
  258. package/dist/esm/Utilities/LengthConverters.js.map +1 -0
  259. package/dist/esm/Utilities/LengthConverters.test.js +22 -0
  260. package/dist/esm/Utilities/LengthConverters.test.js.map +1 -0
  261. package/dist/esm/Utilities/LerpNumber.js +81 -0
  262. package/dist/esm/Utilities/LerpNumber.js.map +1 -0
  263. package/dist/esm/Utilities/LerpNumber.test.js +88 -0
  264. package/dist/esm/Utilities/LerpNumber.test.js.map +1 -0
  265. package/dist/esm/Utilities/degreesToRadians.js +4 -0
  266. package/dist/esm/Utilities/degreesToRadians.js.map +1 -0
  267. package/dist/esm/Utilities/degreesToRadians.test.js +7 -0
  268. package/dist/esm/Utilities/degreesToRadians.test.js.map +1 -0
  269. package/dist/esm/Utilities/easeFunctions.js +183 -0
  270. package/dist/esm/Utilities/easeFunctions.js.map +1 -0
  271. package/dist/esm/Utilities/easeFunctions.test.js +207 -0
  272. package/dist/esm/Utilities/easeFunctions.test.js.map +1 -0
  273. package/dist/esm/Utilities/generateUniqueID.js +5 -0
  274. package/dist/esm/Utilities/generateUniqueID.js.map +1 -0
  275. package/{src/Utilities/index.ts → dist/esm/Utilities/index.js} +6 -6
  276. package/dist/esm/Utilities/index.js.map +1 -0
  277. package/dist/esm/Utilities/interpolateNumber.js +15 -0
  278. package/dist/esm/Utilities/interpolateNumber.js.map +1 -0
  279. package/dist/esm/Utilities/interpolateNumber.test.js +24 -0
  280. package/dist/esm/Utilities/interpolateNumber.test.js.map +1 -0
  281. package/dist/esm/ValueObjects/Angle.js +43 -0
  282. package/dist/esm/ValueObjects/Angle.js.map +1 -0
  283. package/dist/esm/ValueObjects/Angle.test.js +26 -0
  284. package/dist/esm/ValueObjects/Angle.test.js.map +1 -0
  285. package/dist/esm/ValueObjects/Color.js +855 -0
  286. package/dist/esm/ValueObjects/Color.js.map +1 -0
  287. package/dist/esm/ValueObjects/Color.test.js +145 -0
  288. package/dist/esm/ValueObjects/Color.test.js.map +1 -0
  289. package/dist/esm/ValueObjects/LineSegment2D.js +68 -0
  290. package/dist/esm/ValueObjects/LineSegment2D.js.map +1 -0
  291. package/dist/esm/ValueObjects/LineSegment2D.test.js +100 -0
  292. package/dist/esm/ValueObjects/LineSegment2D.test.js.map +1 -0
  293. package/dist/esm/ValueObjects/Matrix.js +462 -0
  294. package/dist/esm/ValueObjects/Matrix.js.map +1 -0
  295. package/dist/esm/ValueObjects/Matrix.test.js +383 -0
  296. package/dist/esm/ValueObjects/Matrix.test.js.map +1 -0
  297. package/dist/esm/ValueObjects/ParametricLine.js +73 -0
  298. package/dist/esm/ValueObjects/ParametricLine.js.map +1 -0
  299. package/dist/esm/ValueObjects/ParametricLine.test.js +124 -0
  300. package/dist/esm/ValueObjects/ParametricLine.test.js.map +1 -0
  301. package/dist/esm/ValueObjects/ParametricPlane.js +61 -0
  302. package/dist/esm/ValueObjects/ParametricPlane.js.map +1 -0
  303. package/dist/esm/ValueObjects/ParametricPlane.test.js +99 -0
  304. package/dist/esm/ValueObjects/ParametricPlane.test.js.map +1 -0
  305. package/dist/esm/ValueObjects/Quaternion.js +286 -0
  306. package/dist/esm/ValueObjects/Quaternion.js.map +1 -0
  307. package/dist/esm/ValueObjects/Quaternion.test.js +238 -0
  308. package/dist/esm/ValueObjects/Quaternion.test.js.map +1 -0
  309. package/dist/esm/ValueObjects/Rectangle.js +20 -0
  310. package/dist/esm/ValueObjects/Rectangle.js.map +1 -0
  311. package/dist/esm/ValueObjects/Rectangle.test.js +30 -0
  312. package/dist/esm/ValueObjects/Rectangle.test.js.map +1 -0
  313. package/dist/esm/ValueObjects/Vector2.js +180 -0
  314. package/dist/esm/ValueObjects/Vector2.js.map +1 -0
  315. package/dist/esm/ValueObjects/Vector2.test.js +134 -0
  316. package/dist/esm/ValueObjects/Vector2.test.js.map +1 -0
  317. package/dist/esm/ValueObjects/Vector3.js +227 -0
  318. package/dist/esm/ValueObjects/Vector3.js.map +1 -0
  319. package/dist/esm/ValueObjects/Vector3.test.js +186 -0
  320. package/dist/esm/ValueObjects/Vector3.test.js.map +1 -0
  321. package/{src/ValueObjects/index.ts → dist/esm/ValueObjects/index.js} +11 -14
  322. package/dist/esm/ValueObjects/index.js.map +1 -0
  323. package/{src/index.ts → dist/esm/index.js} +6 -5
  324. package/dist/esm/index.js.map +1 -0
  325. package/dist/types/AppObject/AppObject.d.ts +15 -0
  326. package/dist/types/AppObject/AppObject.d.ts.map +1 -0
  327. package/dist/types/AppObject/AppObject.test.d.ts +7 -0
  328. package/dist/types/AppObject/AppObject.test.d.ts.map +1 -0
  329. package/dist/types/AppObject/AppObjectComponent.d.ts +26 -0
  330. package/dist/types/AppObject/AppObjectComponent.d.ts.map +1 -0
  331. package/dist/types/AppObject/AppObjectComponent.test.d.ts +2 -0
  332. package/dist/types/AppObject/AppObjectComponent.test.d.ts.map +1 -0
  333. package/dist/types/AppObject/AppObjectController.d.ts +5 -0
  334. package/dist/types/AppObject/AppObjectController.d.ts.map +1 -0
  335. package/dist/types/AppObject/AppObjectEntity.d.ts +16 -0
  336. package/dist/types/AppObject/AppObjectEntity.d.ts.map +1 -0
  337. package/dist/types/AppObject/AppObjectEntity.test.d.ts +2 -0
  338. package/dist/types/AppObject/AppObjectEntity.test.d.ts.map +1 -0
  339. package/dist/types/AppObject/AppObjectEntityRepo.d.ts +16 -0
  340. package/dist/types/AppObject/AppObjectEntityRepo.d.ts.map +1 -0
  341. package/dist/types/AppObject/AppObjectEntityRepo.test.d.ts +2 -0
  342. package/dist/types/AppObject/AppObjectEntityRepo.test.d.ts.map +1 -0
  343. package/dist/types/AppObject/AppObjectPM.d.ts +13 -0
  344. package/dist/types/AppObject/AppObjectPM.d.ts.map +1 -0
  345. package/dist/types/AppObject/AppObjectPM.test.d.ts +2 -0
  346. package/dist/types/AppObject/AppObjectPM.test.d.ts.map +1 -0
  347. package/dist/types/AppObject/AppObjectRepo.d.ts +26 -0
  348. package/dist/types/AppObject/AppObjectRepo.d.ts.map +1 -0
  349. package/dist/types/AppObject/AppObjectRepo.test.d.ts +2 -0
  350. package/dist/types/AppObject/AppObjectRepo.test.d.ts.map +1 -0
  351. package/dist/types/AppObject/AppObjectUC.d.ts +5 -0
  352. package/dist/types/AppObject/AppObjectUC.d.ts.map +1 -0
  353. package/dist/types/AppObject/AppObjectView.d.ts +5 -0
  354. package/dist/types/AppObject/AppObjectView.d.ts.map +1 -0
  355. package/dist/types/AppObject/getSingletonComponent.d.ts +4 -0
  356. package/dist/types/AppObject/getSingletonComponent.d.ts.map +1 -0
  357. package/dist/types/AppObject/getSingletonComponent.test.d.ts +2 -0
  358. package/dist/types/AppObject/getSingletonComponent.test.d.ts.map +1 -0
  359. package/dist/types/AppObject/index.d.ts +11 -0
  360. package/dist/types/AppObject/index.d.ts.map +1 -0
  361. package/dist/types/AppObject/printAppObjectDetails.d.ts +3 -0
  362. package/dist/types/AppObject/printAppObjectDetails.d.ts.map +1 -0
  363. package/dist/types/Entities/MemoizedAngle.d.ts +10 -0
  364. package/dist/types/Entities/MemoizedAngle.d.ts.map +1 -0
  365. package/dist/types/Entities/MemoizedAngle.test.d.ts +2 -0
  366. package/dist/types/Entities/MemoizedAngle.test.d.ts.map +1 -0
  367. package/dist/types/Entities/MemoizedBoolean.d.ts +9 -0
  368. package/dist/types/Entities/MemoizedBoolean.d.ts.map +1 -0
  369. package/dist/types/Entities/MemoizedBoolean.test.d.ts +2 -0
  370. package/dist/types/Entities/MemoizedBoolean.test.d.ts.map +1 -0
  371. package/dist/types/Entities/MemoizedColor.d.ts +10 -0
  372. package/dist/types/Entities/MemoizedColor.d.ts.map +1 -0
  373. package/dist/types/Entities/MemoizedColor.test.d.ts +2 -0
  374. package/dist/types/Entities/MemoizedColor.test.d.ts.map +1 -0
  375. package/dist/types/Entities/MemoizedNumber.d.ts +9 -0
  376. package/dist/types/Entities/MemoizedNumber.d.ts.map +1 -0
  377. package/dist/types/Entities/MemoizedNumber.test.d.ts +2 -0
  378. package/dist/types/Entities/MemoizedNumber.test.d.ts.map +1 -0
  379. package/dist/types/Entities/MemoizedQuaternion.d.ts +10 -0
  380. package/dist/types/Entities/MemoizedQuaternion.d.ts.map +1 -0
  381. package/dist/types/Entities/MemoizedQuaternion.test.d.ts +2 -0
  382. package/dist/types/Entities/MemoizedQuaternion.test.d.ts.map +1 -0
  383. package/dist/types/Entities/MemoizedString.d.ts +9 -0
  384. package/dist/types/Entities/MemoizedString.d.ts.map +1 -0
  385. package/dist/types/Entities/MemoizedString.test.d.ts +2 -0
  386. package/dist/types/Entities/MemoizedString.test.d.ts.map +1 -0
  387. package/dist/types/Entities/MemoizedVector2.d.ts +10 -0
  388. package/dist/types/Entities/MemoizedVector2.d.ts.map +1 -0
  389. package/dist/types/Entities/MemoizedVector2.test.d.ts +2 -0
  390. package/dist/types/Entities/MemoizedVector2.test.d.ts.map +1 -0
  391. package/dist/types/Entities/MemoizedVector3.d.ts +10 -0
  392. package/dist/types/Entities/MemoizedVector3.d.ts.map +1 -0
  393. package/dist/types/Entities/MemoizedVector3.test.d.ts +2 -0
  394. package/dist/types/Entities/MemoizedVector3.test.d.ts.map +1 -0
  395. package/dist/types/Entities/ObservableEntity.d.ts +8 -0
  396. package/dist/types/Entities/ObservableEntity.d.ts.map +1 -0
  397. package/dist/types/Entities/ObservableEntity.test.d.ts +2 -0
  398. package/dist/types/Entities/ObservableEntity.test.d.ts.map +1 -0
  399. package/dist/types/Entities/ObserverList.d.ts +8 -0
  400. package/dist/types/Entities/ObserverList.d.ts.map +1 -0
  401. package/dist/types/Entities/ObserverList.test.d.ts +2 -0
  402. package/dist/types/Entities/ObserverList.test.d.ts.map +1 -0
  403. package/dist/types/Entities/RangedNumber.d.ts +17 -0
  404. package/dist/types/Entities/RangedNumber.d.ts.map +1 -0
  405. package/dist/types/Entities/RangedNumber.test.d.ts +2 -0
  406. package/dist/types/Entities/RangedNumber.test.d.ts.map +1 -0
  407. package/dist/types/Entities/index.d.ts +12 -0
  408. package/dist/types/Entities/index.d.ts.map +1 -0
  409. package/dist/types/Types/AppBoundary.d.ts +11 -0
  410. package/dist/types/Types/AppBoundary.d.ts.map +1 -0
  411. package/dist/types/Types/EaseFn.d.ts +2 -0
  412. package/dist/types/Types/EaseFn.d.ts.map +1 -0
  413. package/dist/types/Types/PmAdapter.d.ts +7 -0
  414. package/dist/types/Types/PmAdapter.d.ts.map +1 -0
  415. package/dist/types/Types/SingletonPmAdapter.d.ts +7 -0
  416. package/dist/types/Types/SingletonPmAdapter.d.ts.map +1 -0
  417. package/dist/types/Types/index.d.ts +5 -0
  418. package/dist/types/Types/index.d.ts.map +1 -0
  419. package/dist/types/Utilities/LengthConverters.d.ts +5 -0
  420. package/dist/types/Utilities/LengthConverters.d.ts.map +1 -0
  421. package/dist/types/Utilities/LengthConverters.test.d.ts +2 -0
  422. package/dist/types/Utilities/LengthConverters.test.d.ts.map +1 -0
  423. package/dist/types/Utilities/LerpNumber.d.ts +57 -0
  424. package/dist/types/Utilities/LerpNumber.d.ts.map +1 -0
  425. package/dist/types/Utilities/LerpNumber.test.d.ts +2 -0
  426. package/dist/types/Utilities/LerpNumber.test.d.ts.map +1 -0
  427. package/dist/types/Utilities/degreesToRadians.d.ts +2 -0
  428. package/dist/types/Utilities/degreesToRadians.d.ts.map +1 -0
  429. package/dist/types/Utilities/degreesToRadians.test.d.ts +2 -0
  430. package/dist/types/Utilities/degreesToRadians.test.d.ts.map +1 -0
  431. package/dist/types/Utilities/easeFunctions.d.ts +24 -0
  432. package/dist/types/Utilities/easeFunctions.d.ts.map +1 -0
  433. package/dist/types/Utilities/easeFunctions.test.d.ts +2 -0
  434. package/dist/types/Utilities/easeFunctions.test.d.ts.map +1 -0
  435. package/dist/types/Utilities/generateUniqueID.d.ts +2 -0
  436. package/dist/types/Utilities/generateUniqueID.d.ts.map +1 -0
  437. package/dist/types/Utilities/index.d.ts +6 -0
  438. package/dist/types/Utilities/index.d.ts.map +1 -0
  439. package/dist/types/Utilities/interpolateNumber.d.ts +2 -0
  440. package/dist/types/Utilities/interpolateNumber.d.ts.map +1 -0
  441. package/dist/types/Utilities/interpolateNumber.test.d.ts +2 -0
  442. package/dist/types/Utilities/interpolateNumber.test.d.ts.map +1 -0
  443. package/dist/types/ValueObjects/Angle.d.ts +27 -0
  444. package/dist/types/ValueObjects/Angle.d.ts.map +1 -0
  445. package/dist/types/ValueObjects/Angle.test.d.ts +2 -0
  446. package/dist/types/ValueObjects/Angle.test.d.ts.map +1 -0
  447. package/dist/types/ValueObjects/Color.d.ts +83 -0
  448. package/dist/types/ValueObjects/Color.d.ts.map +1 -0
  449. package/dist/types/ValueObjects/Color.test.d.ts +2 -0
  450. package/dist/types/ValueObjects/Color.test.d.ts.map +1 -0
  451. package/dist/types/ValueObjects/LineSegment2D.d.ts +12 -0
  452. package/dist/types/ValueObjects/LineSegment2D.d.ts.map +1 -0
  453. package/dist/types/ValueObjects/LineSegment2D.test.d.ts +2 -0
  454. package/dist/types/ValueObjects/LineSegment2D.test.d.ts.map +1 -0
  455. package/dist/types/ValueObjects/Matrix.d.ts +124 -0
  456. package/dist/types/ValueObjects/Matrix.d.ts.map +1 -0
  457. package/dist/types/ValueObjects/Matrix.test.d.ts +2 -0
  458. package/dist/types/ValueObjects/Matrix.test.d.ts.map +1 -0
  459. package/dist/types/ValueObjects/ParametricLine.d.ts +31 -0
  460. package/dist/types/ValueObjects/ParametricLine.d.ts.map +1 -0
  461. package/dist/types/ValueObjects/ParametricLine.test.d.ts +2 -0
  462. package/dist/types/ValueObjects/ParametricLine.test.d.ts.map +1 -0
  463. package/dist/types/ValueObjects/ParametricPlane.d.ts +21 -0
  464. package/dist/types/ValueObjects/ParametricPlane.d.ts.map +1 -0
  465. package/dist/types/ValueObjects/ParametricPlane.test.d.ts +2 -0
  466. package/dist/types/ValueObjects/ParametricPlane.test.d.ts.map +1 -0
  467. package/dist/types/ValueObjects/Quaternion.d.ts +113 -0
  468. package/dist/types/ValueObjects/Quaternion.d.ts.map +1 -0
  469. package/dist/types/ValueObjects/Quaternion.test.d.ts +2 -0
  470. package/dist/types/ValueObjects/Quaternion.test.d.ts.map +1 -0
  471. package/dist/types/ValueObjects/Rectangle.d.ts +16 -0
  472. package/dist/types/ValueObjects/Rectangle.d.ts.map +1 -0
  473. package/dist/types/ValueObjects/Rectangle.test.d.ts +2 -0
  474. package/dist/types/ValueObjects/Rectangle.test.d.ts.map +1 -0
  475. package/dist/types/ValueObjects/Vector2.d.ts +121 -0
  476. package/dist/types/ValueObjects/Vector2.d.ts.map +1 -0
  477. package/dist/types/ValueObjects/Vector2.test.d.ts +2 -0
  478. package/dist/types/ValueObjects/Vector2.test.d.ts.map +1 -0
  479. package/dist/types/ValueObjects/Vector3.d.ts +150 -0
  480. package/dist/types/ValueObjects/Vector3.d.ts.map +1 -0
  481. package/dist/types/ValueObjects/Vector3.test.d.ts +2 -0
  482. package/dist/types/ValueObjects/Vector3.test.d.ts.map +1 -0
  483. package/dist/types/ValueObjects/index.d.ts +11 -0
  484. package/dist/types/ValueObjects/index.d.ts.map +1 -0
  485. package/dist/types/index.d.ts +6 -0
  486. package/dist/types/index.d.ts.map +1 -0
  487. package/package.json +5 -2
  488. package/babel.config.js +0 -12
  489. package/jestconfig.json +0 -10
  490. package/src/AppObject/AppObject.test.ts +0 -158
  491. package/src/AppObject/AppObject.ts +0 -83
  492. package/src/AppObject/AppObjectComponent.test.ts +0 -219
  493. package/src/AppObject/AppObjectComponent.ts +0 -100
  494. package/src/AppObject/AppObjectController.ts +0 -8
  495. package/src/AppObject/AppObjectEntity.test.ts +0 -151
  496. package/src/AppObject/AppObjectEntity.ts +0 -45
  497. package/src/AppObject/AppObjectEntityRepo.test.ts +0 -211
  498. package/src/AppObject/AppObjectEntityRepo.ts +0 -61
  499. package/src/AppObject/AppObjectPM.test.ts +0 -152
  500. package/src/AppObject/AppObjectPM.ts +0 -43
  501. package/src/AppObject/AppObjectRepo.test.ts +0 -317
  502. package/src/AppObject/AppObjectRepo.ts +0 -203
  503. package/src/AppObject/AppObjectUC.ts +0 -5
  504. package/src/AppObject/AppObjectView.ts +0 -5
  505. package/src/AppObject/getSingletonComponent.test.ts +0 -17
  506. package/src/AppObject/getSingletonComponent.ts +0 -9
  507. package/src/AppObject/index.ts +0 -10
  508. package/src/AppObject/printAppObjectDetails.ts +0 -17
  509. package/src/Entities/MemoizedAngle.test.ts +0 -38
  510. package/src/Entities/MemoizedAngle.ts +0 -25
  511. package/src/Entities/MemoizedBoolean.test.ts +0 -45
  512. package/src/Entities/MemoizedBoolean.ts +0 -23
  513. package/src/Entities/MemoizedColor.test.ts +0 -39
  514. package/src/Entities/MemoizedColor.ts +0 -27
  515. package/src/Entities/MemoizedNumber.test.ts +0 -37
  516. package/src/Entities/MemoizedNumber.ts +0 -23
  517. package/src/Entities/MemoizedQuaternion.test.ts +0 -39
  518. package/src/Entities/MemoizedQuaternion.ts +0 -27
  519. package/src/Entities/MemoizedString.test.ts +0 -37
  520. package/src/Entities/MemoizedString.ts +0 -23
  521. package/src/Entities/MemoizedVector2.test.ts +0 -39
  522. package/src/Entities/MemoizedVector2.ts +0 -27
  523. package/src/Entities/MemoizedVector3.test.ts +0 -39
  524. package/src/Entities/MemoizedVector3.ts +0 -27
  525. package/src/Entities/ObservableEntity.test.ts +0 -28
  526. package/src/Entities/ObservableEntity.ts +0 -17
  527. package/src/Entities/ObserverList.test.ts +0 -61
  528. package/src/Entities/ObserverList.ts +0 -24
  529. package/src/Entities/RangedNumber.test.ts +0 -118
  530. package/src/Entities/RangedNumber.ts +0 -45
  531. package/src/Types/AppBoundary.ts +0 -13
  532. package/src/Types/EaseFn.ts +0 -1
  533. package/src/Types/PmAdapter.ts +0 -15
  534. package/src/Types/SingletonPmAdapter.ts +0 -7
  535. package/src/Utilities/LengthConverters.test.ts +0 -30
  536. package/src/Utilities/LengthConverters.ts +0 -18
  537. package/src/Utilities/LerpNumber.test.ts +0 -109
  538. package/src/Utilities/LerpNumber.ts +0 -109
  539. package/src/Utilities/degreesToRadians.test.ts +0 -8
  540. package/src/Utilities/degreesToRadians.ts +0 -3
  541. package/src/Utilities/easeFunctions.test.ts +0 -251
  542. package/src/Utilities/easeFunctions.ts +0 -180
  543. package/src/Utilities/generateUniqueID.ts +0 -5
  544. package/src/Utilities/interpolateNumber.test.ts +0 -28
  545. package/src/Utilities/interpolateNumber.ts +0 -21
  546. package/src/ValueObjects/Angle.test.ts +0 -30
  547. package/src/ValueObjects/Angle.ts +0 -47
  548. package/src/ValueObjects/Color.test.ts +0 -181
  549. package/src/ValueObjects/Color.ts +0 -891
  550. package/src/ValueObjects/LineSegment2D.test.ts +0 -144
  551. package/src/ValueObjects/LineSegment2D.ts +0 -93
  552. package/src/ValueObjects/Matrix.test.ts +0 -498
  553. package/src/ValueObjects/Matrix.ts +0 -567
  554. package/src/ValueObjects/ParametricLine.test.ts +0 -155
  555. package/src/ValueObjects/ParametricLine.ts +0 -114
  556. package/src/ValueObjects/ParametricPlane.test.ts +0 -122
  557. package/src/ValueObjects/ParametricPlane.ts +0 -82
  558. package/src/ValueObjects/Quaternion.test.ts +0 -356
  559. package/src/ValueObjects/Quaternion.ts +0 -353
  560. package/src/ValueObjects/Rectangle.test.ts +0 -32
  561. package/src/ValueObjects/Rectangle.ts +0 -33
  562. package/src/ValueObjects/Vector2.test.ts +0 -167
  563. package/src/ValueObjects/Vector2.ts +0 -209
  564. package/src/ValueObjects/Vector3.test.ts +0 -228
  565. package/src/ValueObjects/Vector3.ts +0 -269
  566. package/tsconfig.build.json +0 -7
  567. package/tsconfig.cjs.json +0 -9
  568. package/tsconfig.esm.json +0 -12
  569. package/tsconfig.json +0 -19
  570. package/tslint.json +0 -11
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ParametricLine.test.js","sourceRoot":"","sources":["../../../src/ValueObjects/ParametricLine.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { Vector3 } from \".\";\r\nimport { LineParameters, ParametricLine } from \"./ParametricLine\";\r\n\r\ntest(\"Setting and getting the parameters\", () => {\r\n const inputParameters: LineParameters = {\r\n x0: 1,\r\n y0: 2,\r\n z0: 3,\r\n a: 4,\r\n b: 5,\r\n c: 6,\r\n };\r\n const line = new ParametricLine(inputParameters);\r\n\r\n const dirUnit = new Vector3(4, 5, 6).unit;\r\n\r\n expect(line.x0).toEqual(inputParameters.x0);\r\n expect(line.y0).toEqual(inputParameters.y0);\r\n expect(line.z0).toEqual(inputParameters.z0);\r\n expect(line.a).toBeCloseTo(dirUnit.x);\r\n expect(line.b).toBeCloseTo(dirUnit.y);\r\n expect(line.c).toBeCloseTo(dirUnit.z);\r\n});\r\n\r\ntest(\"Line from point and direction\", () => {\r\n const point = new Vector3(1, 2, 3);\r\n const dir = new Vector3(10, 20, 30).unit;\r\n\r\n const line = ParametricLine.FromPointDirection(point, dir);\r\n\r\n expect(line.x0).toEqual(1);\r\n expect(line.y0).toEqual(2);\r\n expect(line.z0).toEqual(3);\r\n expect(line.a).toBeCloseTo(dir.x);\r\n expect(line.b).toBeCloseTo(dir.y);\r\n expect(line.c).toBeCloseTo(dir.z);\r\n});\r\n\r\ntest(\"From two points\", () => {\r\n const p1 = new Vector3(1, 2, 3);\r\n const p2 = new Vector3(4, 5, 6);\r\n\r\n const line = ParametricLine.FromTwoPoint(p1, p2);\r\n\r\n const dir = Vector3.Subtract(p2, p1).unit;\r\n\r\n expect(line.x0).toEqual(1);\r\n expect(line.y0).toEqual(2);\r\n expect(line.z0).toEqual(3);\r\n expect(line.a).toEqual(dir.x);\r\n expect(line.b).toEqual(dir.y);\r\n expect(line.c).toEqual(dir.z);\r\n});\r\n\r\ntest(\"Get point\", () => {\r\n const p1 = new Vector3(1, 2, 3);\r\n const p2 = new Vector3(4, 5, 6);\r\n\r\n let dir = Vector3.Subtract(p2, p1).unit;\r\n\r\n const distance = 11;\r\n dir = Vector3.NewVectorOfLength(dir, distance);\r\n const expectedPoint = Vector3.Add(p1, dir);\r\n\r\n const line = ParametricLine.FromTwoPoint(p1, p2);\r\n const point = ParametricLine.GetPointAtDistance(line, distance);\r\n expect(point.array).toEqual(expectedPoint.array);\r\n});\r\n\r\ntest(\"Get point along forward\", () => {\r\n const line = ParametricLine.Forward();\r\n const point = ParametricLine.GetPointAtDistance(line, 11);\r\n expect(point.array).toEqual([0, 0, 11]);\r\n});\r\n\r\ntest(\"Get point along backwards\", () => {\r\n const line = ParametricLine.Backward();\r\n const point = ParametricLine.GetPointAtDistance(line, 11);\r\n expect(point.array).toEqual([0, 0, -11]);\r\n});\r\n\r\ntest(\"Get point along up\", () => {\r\n const line = ParametricLine.Up();\r\n const point = ParametricLine.GetPointAtDistance(line, 11);\r\n expect(point.array).toEqual([0, 11, 0]);\r\n});\r\n\r\ntest(\"Get point along down\", () => {\r\n const line = ParametricLine.Down();\r\n const point = ParametricLine.GetPointAtDistance(line, 11);\r\n expect(point.array).toEqual([0, -11, 0]);\r\n});\r\n\r\ntest(\"Get point along left\", () => {\r\n const line = ParametricLine.Left();\r\n const point = ParametricLine.GetPointAtDistance(line, 11);\r\n expect(point.array).toEqual([-11, 0, 0]);\r\n});\r\n\r\ntest(\"Get point along right\", () => {\r\n const line = ParametricLine.Right();\r\n const point = ParametricLine.GetPointAtDistance(line, 11);\r\n expect(point.array).toEqual([11, 0, 0]);\r\n});\r\n\r\ntest(\"Check for equality\", () => {\r\n const inputParameters: LineParameters = {\r\n x0: 1,\r\n y0: 2,\r\n z0: 3,\r\n a: 4,\r\n b: 5,\r\n c: 6,\r\n };\r\n const line1 = new ParametricLine(inputParameters);\r\n const line2 = new ParametricLine(inputParameters);\r\n\r\n expect(line1).toEqual(line2);\r\n});\r\n\r\ntest(\"Geting the origin\", () => {\r\n const origin = new Vector3(1, 2, 3);\r\n const direction = new Vector3(4, 5, 6).unit;\r\n const line = ParametricLine.FromPointDirection(origin, direction);\r\n\r\n expect(line.origin).toEqual(origin);\r\n});\r\n\r\ntest(\"Getting the direction\", () => {\r\n const origin = new Vector3(1, 2, 3);\r\n const direction = new Vector3(4, 5, 6).unit;\r\n const line = ParametricLine.FromPointDirection(origin, direction);\r\n\r\n expect(Vector3.Close(line.direction, direction)).toEqual(true);\r\n});\r\n\r\ntest(\"Ensures the direction is unit\", () => {\r\n const origin = new Vector3(1, 2, 3);\r\n const direction = new Vector3(4, 5, 6);\r\n const line = ParametricLine.FromPointDirection(origin, direction);\r\n\r\n expect(line.direction).toEqual(direction.unit);\r\n});\r\n\r\ntest(\"Get distance to point\", () => {\r\n const origin = new Vector3(1, 2, 3);\r\n const direction = new Vector3(4, 5, 6);\r\n const line = ParametricLine.FromPointDirection(origin, direction);\r\n\r\n const point = new Vector3(10, 20, 30);\r\n\r\n const expected = Vector3.Subtract(point, origin).magnitude;\r\n\r\n expect(ParametricLine.GetDistanceToPoint(line, point)).toEqual(expected);\r\n});\r\n"]}
@@ -0,0 +1,61 @@
1
+ import { ParametricLine } from "./ParametricLine";
2
+ import { Vector3 } from "../ValueObjects/Vector3";
3
+ export class ParametricPlane {
4
+ static FromPointNormal(point, normal) {
5
+ return new ParametricPlane(point, normal);
6
+ }
7
+ static FromThreePoints(A, B, C) {
8
+ const point = A;
9
+ const AB = Vector3.Subtract(B, A);
10
+ const AC = Vector3.Subtract(C, A);
11
+ const normal = Vector3.Cross(AB, AC);
12
+ return new ParametricPlane(point, normal);
13
+ }
14
+ static XY() {
15
+ const p = Vector3.Zero();
16
+ const n = new Vector3(0, 0, 1);
17
+ return new ParametricPlane(p, n);
18
+ }
19
+ static ZX() {
20
+ const p = Vector3.Zero();
21
+ const n = new Vector3(0, 1, 0);
22
+ return new ParametricPlane(p, n);
23
+ }
24
+ static YZ() {
25
+ const p = Vector3.Zero();
26
+ const n = new Vector3(1, 0, 0);
27
+ return new ParametricPlane(p, n);
28
+ }
29
+ GetParameters() {
30
+ const a = this.normal.x;
31
+ const b = this.normal.y;
32
+ const c = this.normal.z;
33
+ let d = Vector3.Dot(this.point, this.normal);
34
+ if (d !== 0) {
35
+ d *= -1;
36
+ }
37
+ return {
38
+ a,
39
+ b,
40
+ c,
41
+ d,
42
+ };
43
+ }
44
+ intersectLine(line) {
45
+ const { x0, y0, z0, a, b, c } = line;
46
+ const { a: A, b: B, c: C, d: D } = this.GetParameters();
47
+ const tNumerator = -(A * x0 + B * y0 + C * z0 + D);
48
+ const tDenominator = A * a + B * b + C * c;
49
+ if (tDenominator === 0) {
50
+ return undefined;
51
+ }
52
+ const t = tNumerator / tDenominator;
53
+ const intersect = ParametricLine.GetPointAtDistance(line, t);
54
+ return intersect;
55
+ }
56
+ constructor(point, normal) {
57
+ this.point = point;
58
+ this.normal = normal;
59
+ }
60
+ }
61
+ //# sourceMappingURL=ParametricPlane.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ParametricPlane.js","sourceRoot":"","sources":["../../../src/ValueObjects/ParametricPlane.ts"],"names":[],"mappings":"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","sourcesContent":["import { ParametricLine } from \"./ParametricLine\";\r\nimport { Vector3 } from \"../ValueObjects/Vector3\";\r\n\r\n// Plane equation: a*x + b*y + c*x + d = 0;\r\n\r\nexport interface PlaneParameters {\r\n a: number;\r\n b: number;\r\n c: number;\r\n d: number;\r\n}\r\n\r\nexport class ParametricPlane {\r\n static FromPointNormal(point: Vector3, normal: Vector3): ParametricPlane {\r\n return new ParametricPlane(point, normal);\r\n }\r\n\r\n static FromThreePoints(A: Vector3, B: Vector3, C: Vector3): ParametricPlane {\r\n const point = A;\r\n const AB = Vector3.Subtract(B, A);\r\n const AC = Vector3.Subtract(C, A);\r\n const normal = Vector3.Cross(AB, AC);\r\n\r\n return new ParametricPlane(point, normal);\r\n }\r\n\r\n static XY(): ParametricPlane {\r\n const p = Vector3.Zero();\r\n const n = new Vector3(0, 0, 1);\r\n return new ParametricPlane(p, n);\r\n }\r\n\r\n static ZX(): ParametricPlane {\r\n const p = Vector3.Zero();\r\n const n = new Vector3(0, 1, 0);\r\n return new ParametricPlane(p, n);\r\n }\r\n\r\n static YZ(): ParametricPlane {\r\n const p = Vector3.Zero();\r\n const n = new Vector3(1, 0, 0);\r\n return new ParametricPlane(p, n);\r\n }\r\n\r\n GetParameters(): PlaneParameters {\r\n const a = this.normal.x;\r\n const b = this.normal.y;\r\n const c = this.normal.z;\r\n let d = Vector3.Dot(this.point, this.normal);\r\n\r\n if (d !== 0) {\r\n d *= -1;\r\n }\r\n\r\n return {\r\n a,\r\n b,\r\n c,\r\n d,\r\n };\r\n }\r\n\r\n public intersectLine(line: ParametricLine): Vector3 | undefined {\r\n const { x0, y0, z0, a, b, c } = line;\r\n const { a: A, b: B, c: C, d: D } = this.GetParameters();\r\n\r\n const tNumerator = -(A * x0 + B * y0 + C * z0 + D);\r\n const tDenominator = A * a + B * b + C * c;\r\n\r\n if (tDenominator === 0) {\r\n return undefined;\r\n }\r\n\r\n const t = tNumerator / tDenominator;\r\n\r\n const intersect = ParametricLine.GetPointAtDistance(line, t);\r\n\r\n return intersect;\r\n }\r\n\r\n constructor(private point: Vector3, private normal: Vector3) {}\r\n}\r\n"]}
@@ -0,0 +1,99 @@
1
+ import { ParametricLine } from "./ParametricLine";
2
+ import { ParametricPlane } from "./ParametricPlane";
3
+ import { Vector3 } from "../ValueObjects";
4
+ test("Setting from point and normal", () => {
5
+ const point = new Vector3(1, 2, 3);
6
+ const normal = new Vector3(4, 5, 6);
7
+ const plane = ParametricPlane.FromPointNormal(point, normal);
8
+ const parameters = plane.GetParameters();
9
+ const dot = Vector3.Dot(point, normal);
10
+ expect(parameters.a).toEqual(normal.x);
11
+ expect(parameters.b).toEqual(normal.y);
12
+ expect(parameters.c).toEqual(normal.z);
13
+ expect(parameters.d).toEqual(-dot);
14
+ });
15
+ test("From three points", () => {
16
+ // From https://keisan.casio.com/exec/system/1223596129
17
+ const A = new Vector3(1, 2, -2);
18
+ const B = new Vector3(3, -2, 1);
19
+ const C = new Vector3(5, 1, -4);
20
+ const plane = ParametricPlane.FromThreePoints(A, B, C);
21
+ const parameters = plane.GetParameters();
22
+ expect(parameters.a).toEqual(11);
23
+ expect(parameters.b).toEqual(16);
24
+ expect(parameters.c).toEqual(14);
25
+ expect(parameters.d).toEqual(-15);
26
+ });
27
+ test("Intersection", () => {
28
+ const point = new Vector3(1, 1, 1);
29
+ const dir = new Vector3(1, 0, 0);
30
+ const line = ParametricLine.FromPointDirection(point, dir);
31
+ const plane1 = new Vector3(-1, 0, 0);
32
+ const plane2 = new Vector3(-1, 1, 0);
33
+ const plane3 = new Vector3(-1, 0, 1);
34
+ const plane = ParametricPlane.FromThreePoints(plane1, plane2, plane3);
35
+ const intersect = plane.intersectLine(line);
36
+ expect(intersect?.x).toBeCloseTo(-1);
37
+ expect(intersect?.y).toBeCloseTo(1);
38
+ expect(intersect?.z).toBeCloseTo(1);
39
+ });
40
+ test("Intersection", () => {
41
+ // From http://www.ambrsoft.com/TrigoCalc/Plan3D/PlaneLineIntersection_.htm
42
+ const line1 = new Vector3(4, 1, 1);
43
+ const line2 = new Vector3(8, -2, -2);
44
+ const line = ParametricLine.FromTwoPoint(line1, line2);
45
+ const plane1 = new Vector3(-1, 2, 4);
46
+ const plane2 = new Vector3(2, 1, 3);
47
+ const plane3 = new Vector3(1, 3, 2);
48
+ const plane = ParametricPlane.FromThreePoints(plane1, plane2, plane3);
49
+ const intersect = plane.intersectLine(line);
50
+ expect(intersect?.x).toBeCloseTo(2.93);
51
+ expect(intersect?.y).toBeCloseTo(1.8);
52
+ expect(intersect?.z).toBeCloseTo(1.8);
53
+ });
54
+ test("If parallel, intersect should come back undefined", () => {
55
+ const line1 = new Vector3(0, 1, 0);
56
+ const line2 = new Vector3(0, -1, 0);
57
+ const line = ParametricLine.FromTwoPoint(line1, line2); // Vertical line going through the origin
58
+ const plane1 = new Vector3(0, 0, 0);
59
+ const plane2 = new Vector3(0, 1, 0);
60
+ const plane3 = new Vector3(0, 0, 1);
61
+ const plane = ParametricPlane.FromThreePoints(plane1, plane2, plane3); // y-z plane
62
+ const intersect = plane.intersectLine(line);
63
+ expect(intersect).toBeUndefined();
64
+ });
65
+ test("XY Plane", () => {
66
+ const plane = ParametricPlane.XY();
67
+ expect(plane.GetParameters()).toEqual({
68
+ a: 0,
69
+ b: 0,
70
+ c: 1,
71
+ d: 0,
72
+ });
73
+ });
74
+ test("ZX Plane", () => {
75
+ const plane = ParametricPlane.ZX();
76
+ expect(plane.GetParameters()).toEqual({
77
+ a: 0,
78
+ b: 1,
79
+ c: 0,
80
+ d: 0,
81
+ });
82
+ });
83
+ test("YZ Plane", () => {
84
+ const plane = ParametricPlane.YZ();
85
+ expect(plane.GetParameters()).toEqual({
86
+ a: 1,
87
+ b: 0,
88
+ c: 0,
89
+ d: 0,
90
+ });
91
+ });
92
+ test("Check for equality", () => {
93
+ const point = new Vector3(1, 2, 3);
94
+ const normal = new Vector3(4, 5, 6);
95
+ const plane1 = ParametricPlane.FromPointNormal(point, normal);
96
+ const plane2 = ParametricPlane.FromPointNormal(point, normal);
97
+ expect(plane1).toEqual(plane2);
98
+ });
99
+ //# sourceMappingURL=ParametricPlane.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ParametricPlane.test.js","sourceRoot":"","sources":["../../../src/ValueObjects/ParametricPlane.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { ParametricLine } from \"./ParametricLine\";\r\nimport { ParametricPlane } from \"./ParametricPlane\";\r\nimport { Vector3 } from \"../ValueObjects\";\r\n\r\ntest(\"Setting from point and normal\", () => {\r\n const point = new Vector3(1, 2, 3);\r\n const normal = new Vector3(4, 5, 6);\r\n const plane = ParametricPlane.FromPointNormal(point, normal);\r\n\r\n const parameters = plane.GetParameters();\r\n\r\n const dot = Vector3.Dot(point, normal);\r\n expect(parameters.a).toEqual(normal.x);\r\n expect(parameters.b).toEqual(normal.y);\r\n expect(parameters.c).toEqual(normal.z);\r\n expect(parameters.d).toEqual(-dot);\r\n});\r\n\r\ntest(\"From three points\", () => {\r\n // From https://keisan.casio.com/exec/system/1223596129\r\n const A = new Vector3(1, 2, -2);\r\n const B = new Vector3(3, -2, 1);\r\n const C = new Vector3(5, 1, -4);\r\n\r\n const plane = ParametricPlane.FromThreePoints(A, B, C);\r\n const parameters = plane.GetParameters();\r\n\r\n expect(parameters.a).toEqual(11);\r\n expect(parameters.b).toEqual(16);\r\n expect(parameters.c).toEqual(14);\r\n expect(parameters.d).toEqual(-15);\r\n});\r\n\r\ntest(\"Intersection\", () => {\r\n const point = new Vector3(1, 1, 1);\r\n const dir = new Vector3(1, 0, 0);\r\n const line = ParametricLine.FromPointDirection(point, dir);\r\n\r\n const plane1 = new Vector3(-1, 0, 0);\r\n const plane2 = new Vector3(-1, 1, 0);\r\n const plane3 = new Vector3(-1, 0, 1);\r\n const plane = ParametricPlane.FromThreePoints(plane1, plane2, plane3);\r\n\r\n const intersect = plane.intersectLine(line);\r\n\r\n expect(intersect?.x).toBeCloseTo(-1);\r\n expect(intersect?.y).toBeCloseTo(1);\r\n expect(intersect?.z).toBeCloseTo(1);\r\n});\r\n\r\ntest(\"Intersection\", () => {\r\n // From http://www.ambrsoft.com/TrigoCalc/Plan3D/PlaneLineIntersection_.htm\r\n\r\n const line1 = new Vector3(4, 1, 1);\r\n const line2 = new Vector3(8, -2, -2);\r\n const line = ParametricLine.FromTwoPoint(line1, line2);\r\n\r\n const plane1 = new Vector3(-1, 2, 4);\r\n const plane2 = new Vector3(2, 1, 3);\r\n const plane3 = new Vector3(1, 3, 2);\r\n const plane = ParametricPlane.FromThreePoints(plane1, plane2, plane3);\r\n\r\n const intersect = plane.intersectLine(line);\r\n\r\n expect(intersect?.x).toBeCloseTo(2.93);\r\n expect(intersect?.y).toBeCloseTo(1.8);\r\n expect(intersect?.z).toBeCloseTo(1.8);\r\n});\r\n\r\ntest(\"If parallel, intersect should come back undefined\", () => {\r\n const line1 = new Vector3(0, 1, 0);\r\n const line2 = new Vector3(0, -1, 0);\r\n const line = ParametricLine.FromTwoPoint(line1, line2); // Vertical line going through the origin\r\n\r\n const plane1 = new Vector3(0, 0, 0);\r\n const plane2 = new Vector3(0, 1, 0);\r\n const plane3 = new Vector3(0, 0, 1);\r\n const plane = ParametricPlane.FromThreePoints(plane1, plane2, plane3); // y-z plane\r\n\r\n const intersect = plane.intersectLine(line);\r\n\r\n expect(intersect).toBeUndefined();\r\n});\r\n\r\ntest(\"XY Plane\", () => {\r\n const plane = ParametricPlane.XY();\r\n expect(plane.GetParameters()).toEqual({\r\n a: 0,\r\n b: 0,\r\n c: 1,\r\n d: 0,\r\n });\r\n});\r\n\r\ntest(\"ZX Plane\", () => {\r\n const plane = ParametricPlane.ZX();\r\n expect(plane.GetParameters()).toEqual({\r\n a: 0,\r\n b: 1,\r\n c: 0,\r\n d: 0,\r\n });\r\n});\r\n\r\ntest(\"YZ Plane\", () => {\r\n const plane = ParametricPlane.YZ();\r\n expect(plane.GetParameters()).toEqual({\r\n a: 1,\r\n b: 0,\r\n c: 0,\r\n d: 0,\r\n });\r\n});\r\n\r\ntest(\"Check for equality\", () => {\r\n const point = new Vector3(1, 2, 3);\r\n const normal = new Vector3(4, 5, 6);\r\n const plane1 = ParametricPlane.FromPointNormal(point, normal);\r\n const plane2 = ParametricPlane.FromPointNormal(point, normal);\r\n\r\n expect(plane1).toEqual(plane2);\r\n});\r\n"]}
@@ -0,0 +1,286 @@
1
+ import { Angle } from "./Angle";
2
+ import { Matrix } from "./Matrix";
3
+ import { Vector3 } from "./Vector3";
4
+ export class Quaternion {
5
+ /**
6
+ * Checks to see if two Quaternions are equal
7
+ * @param a Quaternion A
8
+ * @param b Quaternion B
9
+ * @returns True if they are equal, otherwise false
10
+ */
11
+ static Equal(a, b) {
12
+ if (a.x === b.x && a.y === b.y && a.z === b.z && a.w === b.w) {
13
+ return true;
14
+ }
15
+ else {
16
+ return false;
17
+ }
18
+ }
19
+ /**
20
+ * Checks two quaternions to see if they are close
21
+ * @param a Quaterion A
22
+ * @param b Quaterion B
23
+ * @param threshold "Close" threshold. Defaults to 0.001
24
+ * @returns True if each of Quaterion's components are within the threshold of each other
25
+ */
26
+ static Close(a, b, threshold = 0.001) {
27
+ const aArray = a.toArray();
28
+ const bArray = b.toArray();
29
+ let areClose = true;
30
+ for (let i = 0; i < 4; i++) {
31
+ let diff = aArray[i] - bArray[i];
32
+ if (diff < 0) {
33
+ diff = -diff;
34
+ }
35
+ if (diff > threshold) {
36
+ areClose = false;
37
+ break;
38
+ }
39
+ }
40
+ return areClose;
41
+ }
42
+ /**
43
+ * Multiplies A*B
44
+ * @param a Quaterion A
45
+ * @param b Quaternion B
46
+ * @returns The result of A*B
47
+ */
48
+ static Multiply(a, b) {
49
+ const x = a.x * b.w + a.y * b.z - a.z * b.y + a.w * b.x;
50
+ const y = -a.x * b.z + a.y * b.w + a.z * b.x + a.w * b.y;
51
+ const z = a.x * b.y - a.y * b.x + a.z * b.w + a.w * b.z;
52
+ const w = -a.x * b.x - a.y * b.y - a.z * b.z + a.w * b.w;
53
+ return Quaternion.FromArray([x, y, z, w]);
54
+ }
55
+ /**
56
+ * Creates a new Quaterion from an array of values
57
+ * @param values The four values of the Quaterion: [x,y,z,w]
58
+ * @returns A Quaterion
59
+ */
60
+ static FromArray(values) {
61
+ return new Quaternion(values[0], values[1], values[2], values[3]);
62
+ }
63
+ /**
64
+ * Creates a Quaterion from a Data Transfer Object
65
+ * @param dto The Data Transfer Object
66
+ * @returns The Quaternion
67
+ */
68
+ static FromDTO(dto) {
69
+ return new Quaternion(dto.x, dto.y, dto.z, dto.w);
70
+ }
71
+ /**
72
+ * Creates an Identity Quaternion
73
+ * @returns An Identity Quaternion
74
+ */
75
+ static Identity() {
76
+ return new Quaternion(0, 0, 0, 1);
77
+ }
78
+ /**
79
+ * Creates an quaterion about an axis for a given angle
80
+ * @param axis The rotation axis
81
+ * @param angle The rotation angle
82
+ * @returns The resulting Quaterion
83
+ */
84
+ static FromAngleAxis(axis, angle) {
85
+ const sin = Math.sin(angle.radians / 2);
86
+ const axisUnit = axis.unit;
87
+ const w = Math.cos(angle.radians / 2);
88
+ const x = axisUnit.x * sin;
89
+ const y = axisUnit.y * sin;
90
+ const z = axisUnit.z * sin;
91
+ return new Quaternion(x, y, z, w);
92
+ }
93
+ static FromDirectionVector(direction) {
94
+ if (direction.magnitude === 0) {
95
+ return Quaternion.Identity();
96
+ }
97
+ const dirUnit = direction.unit;
98
+ if (dirUnit.x === 0 && dirUnit.z === 0) {
99
+ if (dirUnit.y > 0) {
100
+ return Quaternion.FromYawPitchRoll(Angle.FromDegrees(0), Angle.FromDegrees(-90), Angle.FromDegrees(0));
101
+ }
102
+ else {
103
+ return Quaternion.FromYawPitchRoll(Angle.FromDegrees(0), Angle.FromDegrees(90), Angle.FromDegrees(0));
104
+ }
105
+ }
106
+ const yawRadians = -Math.atan2(dirUnit.z, dirUnit.x) + Math.PI / 2;
107
+ const len = Math.sqrt(dirUnit.x * dirUnit.x + dirUnit.z * dirUnit.z);
108
+ const pitchRadians = -Math.atan2(dirUnit.y, len);
109
+ const yaw = Angle.FromRadians(yawRadians);
110
+ const pitch = Angle.FromRadians(pitchRadians);
111
+ const roll = Angle.FromRadians(0);
112
+ return Quaternion.FromYawPitchRoll(yaw, pitch, roll);
113
+ }
114
+ /**
115
+ * Froms up a Quaternion from the Yaw-Pitch-Roll (Tait-Bryan) convetion
116
+ * @param yaw defines the rotation around the y axis
117
+ * @param pitch defines the rotation around the x axis
118
+ * @param roll defines the rotation around the z axis
119
+ * @returns the resulting quaterion
120
+ */
121
+ static FromYawPitchRoll(yaw, pitch, roll) {
122
+ const halfRoll = roll.radians * 0.5;
123
+ const halfPitch = pitch.radians * 0.5;
124
+ const halfYaw = yaw.radians * 0.5;
125
+ const sinRoll = Math.sin(halfRoll);
126
+ const cosRoll = Math.cos(halfRoll);
127
+ const sinPitch = Math.sin(halfPitch);
128
+ const cosPitch = Math.cos(halfPitch);
129
+ const sinYaw = Math.sin(halfYaw);
130
+ const cosYaw = Math.cos(halfYaw);
131
+ const x = cosYaw * sinPitch * cosRoll + sinYaw * cosPitch * sinRoll;
132
+ const y = sinYaw * cosPitch * cosRoll - cosYaw * sinPitch * sinRoll;
133
+ const z = cosYaw * cosPitch * sinRoll - sinYaw * sinPitch * cosRoll;
134
+ const w = cosYaw * cosPitch * cosRoll + sinYaw * sinPitch * sinRoll;
135
+ return new Quaternion(x, y, z, w);
136
+ }
137
+ /**
138
+ * Creates a Quaternion from three euler angles.
139
+ * @param x Rotation about the x axis
140
+ * @param y Rotation about the y axis
141
+ * @param z Rotation about the z axis
142
+ * @returns The Quaterion
143
+ */
144
+ static FromEuler(x, y, z) {
145
+ return this.FromYawPitchRoll(y, x, z);
146
+ }
147
+ /**
148
+ * Returns a new Quaternion that is an invert of A
149
+ * @param a The quaternion to invert
150
+ * @returns The inverted Quaternion
151
+ */
152
+ static Inverse(a) {
153
+ return new Quaternion(-a.x, -a.y, -a.z, a.w);
154
+ }
155
+ static AngleBetween(a, b) {
156
+ const aInv = this.Inverse(a);
157
+ const diffQ = this.Multiply(aInv, b);
158
+ const angDeg = diffQ.angle.degrees;
159
+ if (angDeg > 180) {
160
+ return Angle.FromDegrees(360 - angDeg);
161
+ }
162
+ else {
163
+ return diffQ.angle;
164
+ }
165
+ }
166
+ /**
167
+ * Spherically interpolates between two quaternions
168
+ * @param initial The initial quaternion
169
+ * @param final The final quaterion
170
+ * @param percent The percent along the slerp. 0 will return the initial quaterion and 1 will return the final quaterion
171
+ * @returns The interpolated quaterion
172
+ */
173
+ static Slerp(initial, final, percent) {
174
+ let A;
175
+ let B;
176
+ let C = initial.x * final.x +
177
+ initial.y * final.y +
178
+ initial.z * final.z +
179
+ initial.w * final.w;
180
+ let flip = false;
181
+ if (C < 0) {
182
+ flip = true;
183
+ C = -C;
184
+ }
185
+ if (C > 0.999999) {
186
+ B = 1 - percent;
187
+ A = flip ? -percent : percent;
188
+ }
189
+ else {
190
+ const D = Math.acos(C);
191
+ const E = 1.0 / Math.sin(D);
192
+ B = Math.sin((1.0 - percent) * D) * E;
193
+ A = flip ? -Math.sin(percent * D) * E : Math.sin(percent * D) * E;
194
+ }
195
+ const x = B * initial.x + A * final.x;
196
+ const y = B * initial.y + A * final.y;
197
+ const z = B * initial.z + A * final.z;
198
+ const w = B * initial.w + A * final.w;
199
+ return new Quaternion(x, y, z, w);
200
+ }
201
+ /**
202
+ * Calculates a Quaternion from a rotation matrix
203
+ * @param rotationMatrix A normalized, non-scaled rotation matrix
204
+ * @returns The Quaterion
205
+ */
206
+ static FromRotationMatrix(rotationMatrix) {
207
+ const m = rotationMatrix.m;
208
+ const m11 = m[0];
209
+ const m12 = m[4];
210
+ const m13 = m[8];
211
+ const m21 = m[1];
212
+ const m22 = m[5];
213
+ const m23 = m[9];
214
+ const m31 = m[2];
215
+ const m32 = m[6];
216
+ const m33 = m[10];
217
+ const trace = m11 + m22 + m33;
218
+ let s;
219
+ let x = 0;
220
+ let y = 0;
221
+ let z = 0;
222
+ let w = 0;
223
+ if (trace > 0) {
224
+ s = 0.5 / Math.sqrt(trace + 1.0);
225
+ w = 0.25 / s;
226
+ x = (m32 - m23) * s;
227
+ y = (m13 - m31) * s;
228
+ z = (m21 - m12) * s;
229
+ }
230
+ else if (m11 > m22 && m11 > m33) {
231
+ s = 2.0 * Math.sqrt(1.0 + m11 - m22 - m33);
232
+ w = (m32 - m23) / s;
233
+ x = 0.25 * s;
234
+ y = (m12 + m21) / s;
235
+ z = (m13 + m31) / s;
236
+ }
237
+ else if (m22 > m33) {
238
+ s = 2.0 * Math.sqrt(1.0 + m22 - m11 - m33);
239
+ w = (m13 - m31) / s;
240
+ x = (m12 + m21) / s;
241
+ y = 0.25 * s;
242
+ z = (m23 + m32) / s;
243
+ }
244
+ else {
245
+ s = 2.0 * Math.sqrt(1.0 + m33 - m11 - m22);
246
+ w = (m21 - m12) / s;
247
+ x = (m13 + m31) / s;
248
+ y = (m23 + m32) / s;
249
+ z = 0.25 * s;
250
+ }
251
+ return new Quaternion(x, y, z, w);
252
+ }
253
+ static ToRotationMatrix(quat) {
254
+ return Matrix.Compose(Vector3.One(), quat, Vector3.Zero());
255
+ }
256
+ /**
257
+ * Copy the quaternion to an array
258
+ * @returns an array populated with 4 elements from the quaternion coordinates
259
+ */
260
+ toArray() {
261
+ return [this.x, this.y, this.z, this.w];
262
+ }
263
+ get angle() {
264
+ const angle = 2 * Math.acos(this.w);
265
+ return Angle.FromRadians(angle);
266
+ }
267
+ get axis() {
268
+ const x = this.x / Math.sqrt(1 - this.w * this.w);
269
+ const y = this.y / Math.sqrt(1 - this.w * this.w);
270
+ const z = this.z / Math.sqrt(1 - this.w * this.w);
271
+ return new Vector3(x, y, z);
272
+ }
273
+ /**
274
+ * Get the quaternion as a Data Transfer Object
275
+ */
276
+ get dto() {
277
+ return { x: this.x, y: this.y, z: this.z, w: this.w };
278
+ }
279
+ constructor(x, y, z, w) {
280
+ this.x = x;
281
+ this.y = y;
282
+ this.z = z;
283
+ this.w = w;
284
+ }
285
+ }
286
+ //# sourceMappingURL=Quaternion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Quaternion.js","sourceRoot":"","sources":["../../../src/ValueObjects/Quaternion.ts"],"names":[],"mappings":"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","sourcesContent":["import { Angle } from \"./Angle\";\r\nimport { Matrix } from \"./Matrix\";\r\nimport { Vector3 } from \"./Vector3\";\r\n\r\nexport interface QuaternionDTO {\r\n x: number;\r\n y: number;\r\n z: number;\r\n w: number;\r\n}\r\n\r\nexport class Quaternion {\r\n /**\r\n * Checks to see if two Quaternions are equal\r\n * @param a Quaternion A\r\n * @param b Quaternion B\r\n * @returns True if they are equal, otherwise false\r\n */\r\n public static Equal(a: Quaternion, b: Quaternion): boolean {\r\n if (a.x === b.x && a.y === b.y && a.z === b.z && a.w === b.w) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Checks two quaternions to see if they are close\r\n * @param a Quaterion A\r\n * @param b Quaterion B\r\n * @param threshold \"Close\" threshold. Defaults to 0.001\r\n * @returns True if each of Quaterion's components are within the threshold of each other\r\n */\r\n public static Close(\r\n a: Quaternion,\r\n b: Quaternion,\r\n threshold = 0.001\r\n ): boolean {\r\n const aArray = a.toArray();\r\n const bArray = b.toArray();\r\n\r\n let areClose = true;\r\n for (let i = 0; i < 4; i++) {\r\n let diff = aArray[i] - bArray[i];\r\n if (diff < 0) {\r\n diff = -diff;\r\n }\r\n if (diff > threshold) {\r\n areClose = false;\r\n break;\r\n }\r\n }\r\n return areClose;\r\n }\r\n\r\n /**\r\n * Multiplies A*B\r\n * @param a Quaterion A\r\n * @param b Quaternion B\r\n * @returns The result of A*B\r\n */\r\n public static Multiply(a: Quaternion, b: Quaternion): Quaternion {\r\n const x = a.x * b.w + a.y * b.z - a.z * b.y + a.w * b.x;\r\n const y = -a.x * b.z + a.y * b.w + a.z * b.x + a.w * b.y;\r\n const z = a.x * b.y - a.y * b.x + a.z * b.w + a.w * b.z;\r\n const w = -a.x * b.x - a.y * b.y - a.z * b.z + a.w * b.w;\r\n return Quaternion.FromArray([x, y, z, w]);\r\n }\r\n\r\n /**\r\n * Creates a new Quaterion from an array of values\r\n * @param values The four values of the Quaterion: [x,y,z,w]\r\n * @returns A Quaterion\r\n */\r\n public static FromArray(\r\n values: [number, number, number, number]\r\n ): Quaternion {\r\n return new Quaternion(values[0], values[1], values[2], values[3]);\r\n }\r\n\r\n /**\r\n * Creates a Quaterion from a Data Transfer Object\r\n * @param dto The Data Transfer Object\r\n * @returns The Quaternion\r\n */\r\n public static FromDTO(dto: QuaternionDTO): Quaternion {\r\n return new Quaternion(dto.x, dto.y, dto.z, dto.w);\r\n }\r\n\r\n /**\r\n * Creates an Identity Quaternion\r\n * @returns An Identity Quaternion\r\n */\r\n public static Identity(): Quaternion {\r\n return new Quaternion(0, 0, 0, 1);\r\n }\r\n\r\n /**\r\n * Creates an quaterion about an axis for a given angle\r\n * @param axis The rotation axis\r\n * @param angle The rotation angle\r\n * @returns The resulting Quaterion\r\n */\r\n public static FromAngleAxis(axis: Vector3, angle: Angle): Quaternion {\r\n const sin = Math.sin(angle.radians / 2);\r\n const axisUnit = axis.unit;\r\n const w = Math.cos(angle.radians / 2);\r\n const x = axisUnit.x * sin;\r\n const y = axisUnit.y * sin;\r\n const z = axisUnit.z * sin;\r\n return new Quaternion(x, y, z, w);\r\n }\r\n\r\n public static FromDirectionVector(direction: Vector3): Quaternion {\r\n if (direction.magnitude === 0) {\r\n return Quaternion.Identity();\r\n }\r\n\r\n const dirUnit = direction.unit;\r\n\r\n if (dirUnit.x === 0 && dirUnit.z === 0) {\r\n if (dirUnit.y > 0) {\r\n return Quaternion.FromYawPitchRoll(\r\n Angle.FromDegrees(0),\r\n Angle.FromDegrees(-90),\r\n Angle.FromDegrees(0)\r\n );\r\n } else {\r\n return Quaternion.FromYawPitchRoll(\r\n Angle.FromDegrees(0),\r\n Angle.FromDegrees(90),\r\n Angle.FromDegrees(0)\r\n );\r\n }\r\n }\r\n\r\n const yawRadians = -Math.atan2(dirUnit.z, dirUnit.x) + Math.PI / 2;\r\n const len = Math.sqrt(dirUnit.x * dirUnit.x + dirUnit.z * dirUnit.z);\r\n const pitchRadians = -Math.atan2(dirUnit.y, len);\r\n\r\n const yaw = Angle.FromRadians(yawRadians);\r\n const pitch = Angle.FromRadians(pitchRadians);\r\n const roll = Angle.FromRadians(0);\r\n\r\n return Quaternion.FromYawPitchRoll(yaw, pitch, roll);\r\n }\r\n\r\n /**\r\n * Froms up a Quaternion from the Yaw-Pitch-Roll (Tait-Bryan) convetion\r\n * @param yaw defines the rotation around the y axis\r\n * @param pitch defines the rotation around the x axis\r\n * @param roll defines the rotation around the z axis\r\n * @returns the resulting quaterion\r\n */\r\n public static FromYawPitchRoll(\r\n yaw: Angle,\r\n pitch: Angle,\r\n roll: Angle\r\n ): Quaternion {\r\n const halfRoll = roll.radians * 0.5;\r\n const halfPitch = pitch.radians * 0.5;\r\n const halfYaw = yaw.radians * 0.5;\r\n\r\n const sinRoll = Math.sin(halfRoll);\r\n const cosRoll = Math.cos(halfRoll);\r\n const sinPitch = Math.sin(halfPitch);\r\n const cosPitch = Math.cos(halfPitch);\r\n const sinYaw = Math.sin(halfYaw);\r\n const cosYaw = Math.cos(halfYaw);\r\n\r\n const x = cosYaw * sinPitch * cosRoll + sinYaw * cosPitch * sinRoll;\r\n const y = sinYaw * cosPitch * cosRoll - cosYaw * sinPitch * sinRoll;\r\n const z = cosYaw * cosPitch * sinRoll - sinYaw * sinPitch * cosRoll;\r\n const w = cosYaw * cosPitch * cosRoll + sinYaw * sinPitch * sinRoll;\r\n\r\n return new Quaternion(x, y, z, w);\r\n }\r\n\r\n /**\r\n * Creates a Quaternion from three euler angles.\r\n * @param x Rotation about the x axis\r\n * @param y Rotation about the y axis\r\n * @param z Rotation about the z axis\r\n * @returns The Quaterion\r\n */\r\n public static FromEuler(x: Angle, y: Angle, z: Angle) {\r\n return this.FromYawPitchRoll(y, x, z);\r\n }\r\n\r\n /**\r\n * Returns a new Quaternion that is an invert of A\r\n * @param a The quaternion to invert\r\n * @returns The inverted Quaternion\r\n */\r\n public static Inverse(a: Quaternion): Quaternion {\r\n return new Quaternion(-a.x, -a.y, -a.z, a.w);\r\n }\r\n\r\n public static AngleBetween(a: Quaternion, b: Quaternion): Angle {\r\n const aInv = this.Inverse(a);\r\n const diffQ = this.Multiply(aInv, b);\r\n\r\n const angDeg = diffQ.angle.degrees;\r\n if(angDeg > 180) {\r\n return Angle.FromDegrees(360 - angDeg)\r\n } else {\r\n return diffQ.angle;\r\n }\r\n }\r\n\r\n /**\r\n * Spherically interpolates between two quaternions\r\n * @param initial The initial quaternion\r\n * @param final The final quaterion\r\n * @param percent The percent along the slerp. 0 will return the initial quaterion and 1 will return the final quaterion\r\n * @returns The interpolated quaterion\r\n */\r\n public static Slerp(\r\n initial: Quaternion,\r\n final: Quaternion,\r\n percent: number\r\n ): Quaternion {\r\n let A;\r\n let B;\r\n let C =\r\n initial.x * final.x +\r\n initial.y * final.y +\r\n initial.z * final.z +\r\n initial.w * final.w;\r\n let flip = false;\r\n\r\n if (C < 0) {\r\n flip = true;\r\n C = -C;\r\n }\r\n\r\n if (C > 0.999999) {\r\n B = 1 - percent;\r\n A = flip ? -percent : percent;\r\n } else {\r\n const D = Math.acos(C);\r\n const E = 1.0 / Math.sin(D);\r\n B = Math.sin((1.0 - percent) * D) * E;\r\n A = flip ? -Math.sin(percent * D) * E : Math.sin(percent * D) * E;\r\n }\r\n\r\n const x = B * initial.x + A * final.x;\r\n const y = B * initial.y + A * final.y;\r\n const z = B * initial.z + A * final.z;\r\n const w = B * initial.w + A * final.w;\r\n\r\n return new Quaternion(x, y, z, w);\r\n }\r\n\r\n /**\r\n * Calculates a Quaternion from a rotation matrix\r\n * @param rotationMatrix A normalized, non-scaled rotation matrix\r\n * @returns The Quaterion\r\n */\r\n public static FromRotationMatrix(rotationMatrix: Matrix): Quaternion {\r\n const m = rotationMatrix.m;\r\n const m11 = m[0];\r\n const m12 = m[4];\r\n const m13 = m[8];\r\n const m21 = m[1];\r\n const m22 = m[5];\r\n const m23 = m[9];\r\n const m31 = m[2];\r\n const m32 = m[6];\r\n const m33 = m[10];\r\n const trace = m11 + m22 + m33;\r\n let s;\r\n\r\n let x = 0;\r\n let y = 0;\r\n let z = 0;\r\n let w = 0;\r\n if (trace > 0) {\r\n s = 0.5 / Math.sqrt(trace + 1.0);\r\n\r\n w = 0.25 / s;\r\n x = (m32 - m23) * s;\r\n y = (m13 - m31) * s;\r\n z = (m21 - m12) * s;\r\n } else if (m11 > m22 && m11 > m33) {\r\n s = 2.0 * Math.sqrt(1.0 + m11 - m22 - m33);\r\n\r\n w = (m32 - m23) / s;\r\n x = 0.25 * s;\r\n y = (m12 + m21) / s;\r\n z = (m13 + m31) / s;\r\n } else if (m22 > m33) {\r\n s = 2.0 * Math.sqrt(1.0 + m22 - m11 - m33);\r\n\r\n w = (m13 - m31) / s;\r\n x = (m12 + m21) / s;\r\n y = 0.25 * s;\r\n z = (m23 + m32) / s;\r\n } else {\r\n s = 2.0 * Math.sqrt(1.0 + m33 - m11 - m22);\r\n\r\n w = (m21 - m12) / s;\r\n x = (m13 + m31) / s;\r\n y = (m23 + m32) / s;\r\n z = 0.25 * s;\r\n }\r\n\r\n return new Quaternion(x, y, z, w);\r\n }\r\n\r\n public static ToRotationMatrix(quat: Quaternion): Matrix {\r\n return Matrix.Compose(Vector3.One(), quat, Vector3.Zero());\r\n }\r\n\r\n /**\r\n * Copy the quaternion to an array\r\n * @returns an array populated with 4 elements from the quaternion coordinates\r\n */\r\n toArray(): [number, number, number, number] {\r\n return [this.x, this.y, this.z, this.w];\r\n }\r\n\r\n get angle(): Angle {\r\n const angle = 2 * Math.acos(this.w);\r\n return Angle.FromRadians(angle);\r\n }\r\n\r\n get axis(): Vector3 {\r\n const x = this.x / Math.sqrt(1 - this.w * this.w);\r\n const y = this.y / Math.sqrt(1 - this.w * this.w);\r\n const z = this.z / Math.sqrt(1 - this.w * this.w);\r\n return new Vector3(x, y, z);\r\n }\r\n\r\n /**\r\n * Get the quaternion as a Data Transfer Object\r\n */\r\n get dto(): QuaternionDTO {\r\n return { x: this.x, y: this.y, z: this.z, w: this.w };\r\n }\r\n\r\n readonly x: number;\r\n readonly y: number;\r\n readonly z: number;\r\n readonly w: number;\r\n\r\n constructor(x: number, y: number, z: number, w: number) {\r\n this.x = x;\r\n this.y = y;\r\n this.z = z;\r\n this.w = w;\r\n }\r\n}\r\n"]}