@fimbul-works/vec 1.0.3 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (560) hide show
  1. package/README.md +208 -85
  2. package/dist/cjs/2d/add-2d.d.ts +8 -0
  3. package/dist/cjs/2d/add-2d.js +11 -0
  4. package/dist/cjs/2d/angle-between-2d.d.ts +8 -0
  5. package/dist/cjs/2d/angle-between-2d.js +11 -0
  6. package/dist/cjs/2d/angle-x-2d.d.ts +7 -0
  7. package/dist/cjs/2d/angle-x-2d.js +10 -0
  8. package/dist/cjs/2d/angle-y-2d.d.ts +7 -0
  9. package/dist/cjs/2d/angle-y-2d.js +10 -0
  10. package/dist/cjs/2d/clamp-2d.d.ts +10 -0
  11. package/dist/cjs/2d/clamp-2d.js +14 -0
  12. package/dist/cjs/2d/clone-2d.d.ts +7 -0
  13. package/dist/cjs/2d/clone-2d.js +10 -0
  14. package/dist/cjs/2d/cross-2d.d.ts +8 -0
  15. package/dist/cjs/2d/cross-2d.js +11 -0
  16. package/dist/cjs/2d/distance-2d.d.ts +8 -0
  17. package/dist/cjs/2d/distance-2d.js +11 -0
  18. package/dist/cjs/2d/distance-chebyshev-2d.d.ts +8 -0
  19. package/dist/cjs/2d/distance-chebyshev-2d.js +15 -0
  20. package/dist/cjs/2d/distance-manhattan-2d.d.ts +8 -0
  21. package/dist/cjs/2d/distance-manhattan-2d.js +11 -0
  22. package/dist/cjs/2d/distance-minkowski-2d.d.ts +9 -0
  23. package/dist/cjs/2d/distance-minkowski-2d.js +12 -0
  24. package/dist/cjs/2d/distance-sq-2d.d.ts +8 -0
  25. package/dist/cjs/2d/distance-sq-2d.js +11 -0
  26. package/dist/cjs/2d/divide-2d.d.ts +8 -0
  27. package/dist/cjs/2d/divide-2d.js +14 -0
  28. package/dist/cjs/2d/dot-2d.d.ts +8 -0
  29. package/dist/cjs/2d/dot-2d.js +11 -0
  30. package/dist/cjs/2d/from-angle-x-2d.d.ts +8 -0
  31. package/dist/cjs/2d/from-angle-x-2d.js +14 -0
  32. package/dist/cjs/2d/from-angle-y-2d.d.ts +8 -0
  33. package/dist/cjs/2d/from-angle-y-2d.js +14 -0
  34. package/dist/cjs/2d/from-object-2d.d.ts +10 -0
  35. package/dist/cjs/2d/from-object-2d.js +10 -0
  36. package/dist/cjs/2d/from-polar-coords-2d.d.ts +8 -0
  37. package/dist/cjs/2d/from-polar-coords-2d.js +11 -0
  38. package/dist/cjs/2d/immutable-2d.d.ts +7 -0
  39. package/dist/cjs/2d/immutable-2d.js +10 -0
  40. package/dist/cjs/2d/index.d.ts +47 -0
  41. package/dist/cjs/2d/index.js +63 -0
  42. package/dist/cjs/2d/is-equal-2d.d.ts +8 -0
  43. package/dist/cjs/2d/is-equal-2d.js +11 -0
  44. package/dist/cjs/2d/is-equal-approx-2d.d.ts +9 -0
  45. package/dist/cjs/2d/is-equal-approx-2d.js +12 -0
  46. package/dist/cjs/2d/is-infinite-2d.d.ts +7 -0
  47. package/dist/cjs/2d/is-infinite-2d.js +13 -0
  48. package/dist/cjs/2d/is-nan-2d.d.ts +7 -0
  49. package/dist/cjs/2d/is-nan-2d.js +10 -0
  50. package/dist/cjs/2d/is-opposite-2d.d.ts +8 -0
  51. package/dist/cjs/2d/is-opposite-2d.js +11 -0
  52. package/dist/cjs/2d/is-zero-2d.d.ts +7 -0
  53. package/dist/cjs/2d/is-zero-2d.js +10 -0
  54. package/dist/cjs/2d/lerp-2d.d.ts +9 -0
  55. package/dist/cjs/2d/lerp-2d.js +15 -0
  56. package/dist/cjs/2d/limit-max-2d.d.ts +9 -0
  57. package/dist/cjs/2d/limit-max-2d.js +13 -0
  58. package/dist/cjs/2d/limit-min-2d.d.ts +9 -0
  59. package/dist/cjs/2d/limit-min-2d.js +13 -0
  60. package/dist/cjs/2d/look-at-2d.d.ts +10 -0
  61. package/dist/cjs/2d/look-at-2d.js +14 -0
  62. package/dist/cjs/2d/magnitude-2d.d.ts +7 -0
  63. package/dist/cjs/2d/magnitude-2d.js +10 -0
  64. package/dist/cjs/2d/magnitude-sq-2d.d.ts +7 -0
  65. package/dist/cjs/2d/magnitude-sq-2d.js +10 -0
  66. package/dist/cjs/2d/multiply-2d.d.ts +8 -0
  67. package/dist/cjs/2d/multiply-2d.js +11 -0
  68. package/dist/cjs/2d/negate-2d.d.ts +7 -0
  69. package/dist/cjs/2d/negate-2d.js +10 -0
  70. package/dist/cjs/2d/normalize-2d.d.ts +8 -0
  71. package/dist/cjs/2d/normalize-2d.js +12 -0
  72. package/dist/cjs/2d/one-2d.d.ts +6 -0
  73. package/dist/cjs/2d/one-2d.js +9 -0
  74. package/dist/cjs/2d/project-2d.d.ts +10 -0
  75. package/dist/cjs/2d/project-2d.js +17 -0
  76. package/dist/cjs/2d/random-2d.d.ts +7 -0
  77. package/dist/cjs/2d/random-2d.js +13 -0
  78. package/dist/cjs/2d/reflect-2d.d.ts +9 -0
  79. package/dist/cjs/2d/reflect-2d.js +16 -0
  80. package/dist/cjs/2d/rotate-2d.d.ts +9 -0
  81. package/dist/cjs/2d/rotate-2d.js +27 -0
  82. package/dist/cjs/2d/set-magnitude-2d.d.ts +9 -0
  83. package/dist/cjs/2d/set-magnitude-2d.js +16 -0
  84. package/dist/cjs/2d/subtract-2d.d.ts +8 -0
  85. package/dist/cjs/2d/subtract-2d.js +11 -0
  86. package/dist/cjs/2d/types.d.ts +4 -0
  87. package/dist/cjs/2d/types.js +2 -0
  88. package/dist/cjs/2d/zero-2d.d.ts +6 -0
  89. package/dist/cjs/2d/zero-2d.js +9 -0
  90. package/dist/cjs/3d/add-3d.d.ts +8 -0
  91. package/dist/cjs/3d/add-3d.js +15 -0
  92. package/dist/cjs/3d/angle-between-3d.d.ts +10 -0
  93. package/dist/cjs/3d/angle-between-3d.js +14 -0
  94. package/dist/cjs/3d/angle-x-3d.d.ts +7 -0
  95. package/dist/cjs/3d/angle-x-3d.js +10 -0
  96. package/dist/cjs/3d/angle-y-3d.d.ts +7 -0
  97. package/dist/cjs/3d/angle-y-3d.js +10 -0
  98. package/dist/cjs/3d/angle-z-3d.d.ts +7 -0
  99. package/dist/cjs/3d/angle-z-3d.js +10 -0
  100. package/dist/cjs/3d/clamp-3d.d.ts +10 -0
  101. package/dist/cjs/3d/clamp-3d.js +18 -0
  102. package/dist/cjs/3d/clone-3d.d.ts +7 -0
  103. package/dist/cjs/3d/clone-3d.js +10 -0
  104. package/dist/cjs/3d/cross-3d.d.ts +8 -0
  105. package/dist/cjs/3d/cross-3d.js +15 -0
  106. package/dist/cjs/3d/distance-3d.d.ts +8 -0
  107. package/dist/cjs/3d/distance-3d.js +11 -0
  108. package/dist/cjs/3d/distance-chebyshev-3d.d.ts +8 -0
  109. package/dist/cjs/3d/distance-chebyshev-3d.js +16 -0
  110. package/dist/cjs/3d/distance-manhattan-3d.d.ts +8 -0
  111. package/dist/cjs/3d/distance-manhattan-3d.js +11 -0
  112. package/dist/cjs/3d/distance-minkowski-3d.d.ts +9 -0
  113. package/dist/cjs/3d/distance-minkowski-3d.js +12 -0
  114. package/dist/cjs/3d/distance-sq-3d.d.ts +8 -0
  115. package/dist/cjs/3d/distance-sq-3d.js +11 -0
  116. package/dist/cjs/3d/divide-3d.d.ts +8 -0
  117. package/dist/cjs/3d/divide-3d.js +15 -0
  118. package/dist/cjs/3d/dot-3d.d.ts +8 -0
  119. package/dist/cjs/3d/dot-3d.js +11 -0
  120. package/dist/cjs/3d/from-cylindrical-coords-3d.d.ts +9 -0
  121. package/dist/cjs/3d/from-cylindrical-coords-3d.js +16 -0
  122. package/dist/cjs/3d/from-object-3d.d.ts +11 -0
  123. package/dist/cjs/3d/from-object-3d.js +10 -0
  124. package/dist/cjs/3d/from-spherical-coords-3d.d.ts +9 -0
  125. package/dist/cjs/3d/from-spherical-coords-3d.js +16 -0
  126. package/dist/cjs/3d/immutable-3d.d.ts +7 -0
  127. package/dist/cjs/3d/immutable-3d.js +10 -0
  128. package/dist/cjs/3d/index.d.ts +49 -0
  129. package/dist/cjs/3d/index.js +65 -0
  130. package/dist/cjs/3d/is-equal-3d.d.ts +8 -0
  131. package/dist/cjs/3d/is-equal-3d.js +11 -0
  132. package/dist/cjs/3d/is-equal-approx-3d.d.ts +9 -0
  133. package/dist/cjs/3d/is-equal-approx-3d.js +14 -0
  134. package/dist/cjs/3d/is-infinite-3d.d.ts +7 -0
  135. package/dist/cjs/3d/is-infinite-3d.js +15 -0
  136. package/dist/cjs/3d/is-nan-3d.d.ts +7 -0
  137. package/dist/cjs/3d/is-nan-3d.js +10 -0
  138. package/dist/cjs/3d/is-opposite-3d.d.ts +8 -0
  139. package/dist/cjs/3d/is-opposite-3d.js +11 -0
  140. package/dist/cjs/3d/is-zero-3d.d.ts +7 -0
  141. package/dist/cjs/3d/is-zero-3d.js +10 -0
  142. package/dist/cjs/3d/lerp-3d.d.ts +9 -0
  143. package/dist/cjs/3d/lerp-3d.js +16 -0
  144. package/dist/cjs/3d/limit-max-3d.d.ts +9 -0
  145. package/dist/cjs/3d/limit-max-3d.js +13 -0
  146. package/dist/cjs/3d/limit-min-3d.d.ts +9 -0
  147. package/dist/cjs/3d/limit-min-3d.js +13 -0
  148. package/dist/cjs/3d/look-at-3d.d.ts +10 -0
  149. package/dist/cjs/3d/look-at-3d.js +14 -0
  150. package/dist/cjs/3d/magnitude-3d.d.ts +7 -0
  151. package/dist/cjs/3d/magnitude-3d.js +10 -0
  152. package/dist/cjs/3d/magnitude-sq-3d.d.ts +7 -0
  153. package/dist/cjs/3d/magnitude-sq-3d.js +10 -0
  154. package/dist/cjs/3d/multiply-3d.d.ts +8 -0
  155. package/dist/cjs/3d/multiply-3d.js +15 -0
  156. package/dist/cjs/3d/negate-3d.d.ts +7 -0
  157. package/dist/cjs/3d/negate-3d.js +10 -0
  158. package/dist/cjs/3d/normalize-3d.d.ts +8 -0
  159. package/dist/cjs/3d/normalize-3d.js +12 -0
  160. package/dist/cjs/3d/one-3d.d.ts +6 -0
  161. package/dist/cjs/3d/one-3d.js +9 -0
  162. package/dist/cjs/3d/project-3d.d.ts +10 -0
  163. package/dist/cjs/3d/project-3d.js +17 -0
  164. package/dist/cjs/3d/random-3d.d.ts +7 -0
  165. package/dist/cjs/3d/random-3d.js +11 -0
  166. package/dist/cjs/3d/reflect-3d.d.ts +9 -0
  167. package/dist/cjs/3d/reflect-3d.js +16 -0
  168. package/dist/cjs/3d/rotate-x-3d.d.ts +9 -0
  169. package/dist/cjs/3d/rotate-x-3d.js +26 -0
  170. package/dist/cjs/3d/rotate-y-3d.d.ts +9 -0
  171. package/dist/cjs/3d/rotate-y-3d.js +26 -0
  172. package/dist/cjs/3d/rotate-z-3d.d.ts +9 -0
  173. package/dist/cjs/3d/rotate-z-3d.js +26 -0
  174. package/dist/cjs/3d/set-magnitude-3d.d.ts +9 -0
  175. package/dist/cjs/3d/set-magnitude-3d.js +13 -0
  176. package/dist/cjs/3d/subtract-3d.d.ts +8 -0
  177. package/dist/cjs/3d/subtract-3d.js +15 -0
  178. package/dist/cjs/3d/types.d.ts +4 -0
  179. package/dist/cjs/3d/types.js +2 -0
  180. package/dist/cjs/3d/zero-3d.d.ts +6 -0
  181. package/dist/cjs/3d/zero-3d.js +9 -0
  182. package/dist/cjs/4d/add-4d.d.ts +8 -0
  183. package/dist/cjs/4d/add-4d.js +16 -0
  184. package/dist/cjs/4d/angle-between-4d.d.ts +10 -0
  185. package/dist/cjs/4d/angle-between-4d.js +15 -0
  186. package/dist/cjs/4d/angle-w-4d.d.ts +7 -0
  187. package/dist/cjs/4d/angle-w-4d.js +10 -0
  188. package/dist/cjs/4d/angle-x-4d.d.ts +7 -0
  189. package/dist/cjs/4d/angle-x-4d.js +10 -0
  190. package/dist/cjs/4d/angle-y-4d.d.ts +7 -0
  191. package/dist/cjs/4d/angle-y-4d.js +10 -0
  192. package/dist/cjs/4d/angle-z-4d.d.ts +7 -0
  193. package/dist/cjs/4d/angle-z-4d.js +10 -0
  194. package/dist/cjs/4d/clamp-4d.d.ts +10 -0
  195. package/dist/cjs/4d/clamp-4d.js +18 -0
  196. package/dist/cjs/4d/clone-4d.d.ts +7 -0
  197. package/dist/cjs/4d/clone-4d.js +10 -0
  198. package/dist/cjs/4d/distance-4d.d.ts +8 -0
  199. package/dist/cjs/4d/distance-4d.js +11 -0
  200. package/dist/cjs/4d/distance-chebyshev-4d.d.ts +8 -0
  201. package/dist/cjs/4d/distance-chebyshev-4d.js +23 -0
  202. package/dist/cjs/4d/distance-manhattan-4d.d.ts +8 -0
  203. package/dist/cjs/4d/distance-manhattan-4d.js +14 -0
  204. package/dist/cjs/4d/distance-minkowski-4d.d.ts +9 -0
  205. package/dist/cjs/4d/distance-minkowski-4d.js +16 -0
  206. package/dist/cjs/4d/distance-sq-4d.d.ts +9 -0
  207. package/dist/cjs/4d/distance-sq-4d.js +12 -0
  208. package/dist/cjs/4d/divide-4d.d.ts +8 -0
  209. package/dist/cjs/4d/divide-4d.js +16 -0
  210. package/dist/cjs/4d/dot-4d.d.ts +8 -0
  211. package/dist/cjs/4d/dot-4d.js +11 -0
  212. package/dist/cjs/4d/from-object-4d.d.ts +12 -0
  213. package/dist/cjs/4d/from-object-4d.js +15 -0
  214. package/dist/cjs/4d/immutable-4d.d.ts +7 -0
  215. package/dist/cjs/4d/immutable-4d.js +10 -0
  216. package/dist/cjs/4d/index.d.ts +44 -0
  217. package/dist/cjs/4d/index.js +60 -0
  218. package/dist/cjs/4d/is-equal-4d.d.ts +8 -0
  219. package/dist/cjs/4d/is-equal-4d.js +11 -0
  220. package/dist/cjs/4d/is-equal-approx-4d.d.ts +9 -0
  221. package/dist/cjs/4d/is-equal-approx-4d.js +15 -0
  222. package/dist/cjs/4d/is-infinite-4d.d.ts +7 -0
  223. package/dist/cjs/4d/is-infinite-4d.js +17 -0
  224. package/dist/cjs/4d/is-nan-4d.d.ts +7 -0
  225. package/dist/cjs/4d/is-nan-4d.js +10 -0
  226. package/dist/cjs/4d/is-opposite-4d.d.ts +8 -0
  227. package/dist/cjs/4d/is-opposite-4d.js +11 -0
  228. package/dist/cjs/4d/is-zero-4d.d.ts +7 -0
  229. package/dist/cjs/4d/is-zero-4d.js +10 -0
  230. package/dist/cjs/4d/lerp-4d.d.ts +9 -0
  231. package/dist/cjs/4d/lerp-4d.js +17 -0
  232. package/dist/cjs/4d/limit-max-4d.d.ts +9 -0
  233. package/dist/cjs/4d/limit-max-4d.js +13 -0
  234. package/dist/cjs/4d/limit-min-4d.d.ts +9 -0
  235. package/dist/cjs/4d/limit-min-4d.js +13 -0
  236. package/dist/cjs/4d/look-at-4d.d.ts +10 -0
  237. package/dist/cjs/4d/look-at-4d.js +14 -0
  238. package/dist/cjs/4d/magnitude-4d.d.ts +7 -0
  239. package/dist/cjs/4d/magnitude-4d.js +10 -0
  240. package/dist/cjs/4d/magnitude-sq-4d.d.ts +8 -0
  241. package/dist/cjs/4d/magnitude-sq-4d.js +11 -0
  242. package/dist/cjs/4d/multiply-4d.d.ts +8 -0
  243. package/dist/cjs/4d/multiply-4d.js +16 -0
  244. package/dist/cjs/4d/negate-4d.d.ts +7 -0
  245. package/dist/cjs/4d/negate-4d.js +10 -0
  246. package/dist/cjs/4d/normalize-4d.d.ts +8 -0
  247. package/dist/cjs/4d/normalize-4d.js +17 -0
  248. package/dist/cjs/4d/one-4d.d.ts +6 -0
  249. package/dist/cjs/4d/one-4d.js +9 -0
  250. package/dist/cjs/4d/project-4d.d.ts +10 -0
  251. package/dist/cjs/4d/project-4d.js +18 -0
  252. package/dist/cjs/4d/random-4d.d.ts +7 -0
  253. package/dist/cjs/4d/random-4d.js +21 -0
  254. package/dist/cjs/4d/reflect-4d.d.ts +9 -0
  255. package/dist/cjs/4d/reflect-4d.js +21 -0
  256. package/dist/cjs/4d/set-magnitude-4d.d.ts +9 -0
  257. package/dist/cjs/4d/set-magnitude-4d.js +18 -0
  258. package/dist/cjs/4d/subtract-4d.d.ts +8 -0
  259. package/dist/cjs/4d/subtract-4d.js +16 -0
  260. package/dist/cjs/4d/types.d.ts +4 -0
  261. package/dist/cjs/4d/types.js +2 -0
  262. package/dist/cjs/4d/zero-4d.d.ts +6 -0
  263. package/dist/cjs/4d/zero-4d.js +9 -0
  264. package/dist/cjs/index.d.ts +7 -0
  265. package/dist/cjs/index.js +23 -0
  266. package/dist/cjs/package.json +1 -0
  267. package/dist/cjs/slerp.d.ts +21 -0
  268. package/dist/cjs/slerp.js +28 -0
  269. package/dist/{vec2.d.ts → cjs/vec2.d.ts} +10 -4
  270. package/dist/cjs/vec2.js +889 -0
  271. package/dist/{vec3.d.ts → cjs/vec3.d.ts} +159 -100
  272. package/dist/cjs/vec3.js +1045 -0
  273. package/dist/cjs/vec4.d.ts +602 -0
  274. package/dist/cjs/vec4.js +1101 -0
  275. package/dist/esm/2d/add-2d.d.ts +8 -0
  276. package/dist/esm/2d/add-2d.js +7 -0
  277. package/dist/esm/2d/angle-between-2d.d.ts +8 -0
  278. package/dist/esm/2d/angle-between-2d.js +7 -0
  279. package/dist/esm/2d/angle-x-2d.d.ts +7 -0
  280. package/dist/esm/2d/angle-x-2d.js +6 -0
  281. package/dist/esm/2d/angle-y-2d.d.ts +7 -0
  282. package/dist/esm/2d/angle-y-2d.js +6 -0
  283. package/dist/esm/2d/clamp-2d.d.ts +10 -0
  284. package/dist/esm/2d/clamp-2d.js +10 -0
  285. package/dist/esm/2d/clone-2d.d.ts +7 -0
  286. package/dist/esm/2d/clone-2d.js +6 -0
  287. package/dist/esm/2d/cross-2d.d.ts +8 -0
  288. package/dist/esm/2d/cross-2d.js +7 -0
  289. package/dist/esm/2d/distance-2d.d.ts +8 -0
  290. package/dist/esm/2d/distance-2d.js +7 -0
  291. package/dist/esm/2d/distance-chebyshev-2d.d.ts +8 -0
  292. package/dist/esm/2d/distance-chebyshev-2d.js +11 -0
  293. package/dist/esm/2d/distance-manhattan-2d.d.ts +8 -0
  294. package/dist/esm/2d/distance-manhattan-2d.js +7 -0
  295. package/dist/esm/2d/distance-minkowski-2d.d.ts +9 -0
  296. package/dist/esm/2d/distance-minkowski-2d.js +8 -0
  297. package/dist/esm/2d/distance-sq-2d.d.ts +8 -0
  298. package/dist/esm/2d/distance-sq-2d.js +7 -0
  299. package/dist/esm/2d/divide-2d.d.ts +8 -0
  300. package/dist/esm/2d/divide-2d.js +10 -0
  301. package/dist/esm/2d/dot-2d.d.ts +8 -0
  302. package/dist/esm/2d/dot-2d.js +7 -0
  303. package/dist/esm/2d/from-angle-x-2d.d.ts +8 -0
  304. package/dist/esm/2d/from-angle-x-2d.js +10 -0
  305. package/dist/esm/2d/from-angle-y-2d.d.ts +8 -0
  306. package/dist/esm/2d/from-angle-y-2d.js +10 -0
  307. package/dist/esm/2d/from-object-2d.d.ts +10 -0
  308. package/dist/esm/2d/from-object-2d.js +6 -0
  309. package/dist/esm/2d/from-polar-coords-2d.d.ts +8 -0
  310. package/dist/esm/2d/from-polar-coords-2d.js +7 -0
  311. package/dist/esm/2d/immutable-2d.d.ts +7 -0
  312. package/dist/esm/2d/immutable-2d.js +6 -0
  313. package/dist/esm/2d/index.d.ts +47 -0
  314. package/dist/esm/2d/index.js +47 -0
  315. package/dist/esm/2d/is-equal-2d.d.ts +8 -0
  316. package/dist/esm/2d/is-equal-2d.js +7 -0
  317. package/dist/esm/2d/is-equal-approx-2d.d.ts +9 -0
  318. package/dist/esm/2d/is-equal-approx-2d.js +8 -0
  319. package/dist/esm/2d/is-infinite-2d.d.ts +7 -0
  320. package/dist/esm/2d/is-infinite-2d.js +9 -0
  321. package/dist/esm/2d/is-nan-2d.d.ts +7 -0
  322. package/dist/esm/2d/is-nan-2d.js +6 -0
  323. package/dist/esm/2d/is-opposite-2d.d.ts +8 -0
  324. package/dist/esm/2d/is-opposite-2d.js +7 -0
  325. package/dist/esm/2d/is-zero-2d.d.ts +7 -0
  326. package/dist/esm/2d/is-zero-2d.js +6 -0
  327. package/dist/esm/2d/lerp-2d.d.ts +9 -0
  328. package/dist/esm/2d/lerp-2d.js +11 -0
  329. package/dist/esm/2d/limit-max-2d.d.ts +9 -0
  330. package/dist/esm/2d/limit-max-2d.js +9 -0
  331. package/dist/esm/2d/limit-min-2d.d.ts +9 -0
  332. package/dist/esm/2d/limit-min-2d.js +9 -0
  333. package/dist/esm/2d/look-at-2d.d.ts +10 -0
  334. package/dist/esm/2d/look-at-2d.js +10 -0
  335. package/dist/esm/2d/magnitude-2d.d.ts +7 -0
  336. package/dist/esm/2d/magnitude-2d.js +6 -0
  337. package/dist/esm/2d/magnitude-sq-2d.d.ts +7 -0
  338. package/dist/esm/2d/magnitude-sq-2d.js +6 -0
  339. package/dist/esm/2d/multiply-2d.d.ts +8 -0
  340. package/dist/esm/2d/multiply-2d.js +7 -0
  341. package/dist/esm/2d/negate-2d.d.ts +7 -0
  342. package/dist/esm/2d/negate-2d.js +6 -0
  343. package/dist/esm/2d/normalize-2d.d.ts +8 -0
  344. package/dist/esm/2d/normalize-2d.js +8 -0
  345. package/dist/esm/2d/one-2d.d.ts +6 -0
  346. package/dist/esm/2d/one-2d.js +5 -0
  347. package/dist/esm/2d/project-2d.d.ts +10 -0
  348. package/dist/esm/2d/project-2d.js +13 -0
  349. package/dist/esm/2d/random-2d.d.ts +7 -0
  350. package/dist/esm/2d/random-2d.js +9 -0
  351. package/dist/esm/2d/reflect-2d.d.ts +9 -0
  352. package/dist/esm/2d/reflect-2d.js +12 -0
  353. package/dist/esm/2d/rotate-2d.d.ts +9 -0
  354. package/dist/esm/2d/rotate-2d.js +23 -0
  355. package/dist/esm/2d/set-magnitude-2d.d.ts +9 -0
  356. package/dist/esm/2d/set-magnitude-2d.js +12 -0
  357. package/dist/esm/2d/subtract-2d.d.ts +8 -0
  358. package/dist/esm/2d/subtract-2d.js +7 -0
  359. package/dist/esm/2d/types.d.ts +4 -0
  360. package/dist/esm/2d/types.js +1 -0
  361. package/dist/esm/2d/zero-2d.d.ts +6 -0
  362. package/dist/esm/2d/zero-2d.js +5 -0
  363. package/dist/esm/3d/add-3d.d.ts +8 -0
  364. package/dist/esm/3d/add-3d.js +11 -0
  365. package/dist/esm/3d/angle-between-3d.d.ts +10 -0
  366. package/dist/esm/3d/angle-between-3d.js +10 -0
  367. package/dist/esm/3d/angle-x-3d.d.ts +7 -0
  368. package/dist/esm/3d/angle-x-3d.js +6 -0
  369. package/dist/esm/3d/angle-y-3d.d.ts +7 -0
  370. package/dist/esm/3d/angle-y-3d.js +6 -0
  371. package/dist/esm/3d/angle-z-3d.d.ts +7 -0
  372. package/dist/esm/3d/angle-z-3d.js +6 -0
  373. package/dist/esm/3d/clamp-3d.d.ts +10 -0
  374. package/dist/esm/3d/clamp-3d.js +14 -0
  375. package/dist/esm/3d/clone-3d.d.ts +7 -0
  376. package/dist/esm/3d/clone-3d.js +6 -0
  377. package/dist/esm/3d/cross-3d.d.ts +8 -0
  378. package/dist/esm/3d/cross-3d.js +11 -0
  379. package/dist/esm/3d/distance-3d.d.ts +8 -0
  380. package/dist/esm/3d/distance-3d.js +7 -0
  381. package/dist/esm/3d/distance-chebyshev-3d.d.ts +8 -0
  382. package/dist/esm/3d/distance-chebyshev-3d.js +12 -0
  383. package/dist/esm/3d/distance-manhattan-3d.d.ts +8 -0
  384. package/dist/esm/3d/distance-manhattan-3d.js +7 -0
  385. package/dist/esm/3d/distance-minkowski-3d.d.ts +9 -0
  386. package/dist/esm/3d/distance-minkowski-3d.js +8 -0
  387. package/dist/esm/3d/distance-sq-3d.d.ts +8 -0
  388. package/dist/esm/3d/distance-sq-3d.js +7 -0
  389. package/dist/esm/3d/divide-3d.d.ts +8 -0
  390. package/dist/esm/3d/divide-3d.js +11 -0
  391. package/dist/esm/3d/dot-3d.d.ts +8 -0
  392. package/dist/esm/3d/dot-3d.js +7 -0
  393. package/dist/esm/3d/from-cylindrical-coords-3d.d.ts +9 -0
  394. package/dist/esm/3d/from-cylindrical-coords-3d.js +12 -0
  395. package/dist/esm/3d/from-object-3d.d.ts +11 -0
  396. package/dist/esm/3d/from-object-3d.js +6 -0
  397. package/dist/esm/3d/from-spherical-coords-3d.d.ts +9 -0
  398. package/dist/esm/3d/from-spherical-coords-3d.js +12 -0
  399. package/dist/esm/3d/immutable-3d.d.ts +7 -0
  400. package/dist/esm/3d/immutable-3d.js +6 -0
  401. package/dist/esm/3d/index.d.ts +49 -0
  402. package/dist/esm/3d/index.js +49 -0
  403. package/dist/esm/3d/is-equal-3d.d.ts +8 -0
  404. package/dist/esm/3d/is-equal-3d.js +7 -0
  405. package/dist/esm/3d/is-equal-approx-3d.d.ts +9 -0
  406. package/dist/esm/3d/is-equal-approx-3d.js +10 -0
  407. package/dist/esm/3d/is-infinite-3d.d.ts +7 -0
  408. package/dist/esm/3d/is-infinite-3d.js +11 -0
  409. package/dist/esm/3d/is-nan-3d.d.ts +7 -0
  410. package/dist/esm/3d/is-nan-3d.js +6 -0
  411. package/dist/esm/3d/is-opposite-3d.d.ts +8 -0
  412. package/dist/esm/3d/is-opposite-3d.js +7 -0
  413. package/dist/esm/3d/is-zero-3d.d.ts +7 -0
  414. package/dist/esm/3d/is-zero-3d.js +6 -0
  415. package/dist/esm/3d/lerp-3d.d.ts +9 -0
  416. package/dist/esm/3d/lerp-3d.js +12 -0
  417. package/dist/esm/3d/limit-max-3d.d.ts +9 -0
  418. package/dist/esm/3d/limit-max-3d.js +9 -0
  419. package/dist/esm/3d/limit-min-3d.d.ts +9 -0
  420. package/dist/esm/3d/limit-min-3d.js +9 -0
  421. package/dist/esm/3d/look-at-3d.d.ts +10 -0
  422. package/dist/esm/3d/look-at-3d.js +10 -0
  423. package/dist/esm/3d/magnitude-3d.d.ts +7 -0
  424. package/dist/esm/3d/magnitude-3d.js +6 -0
  425. package/dist/esm/3d/magnitude-sq-3d.d.ts +7 -0
  426. package/dist/esm/3d/magnitude-sq-3d.js +6 -0
  427. package/dist/esm/3d/multiply-3d.d.ts +8 -0
  428. package/dist/esm/3d/multiply-3d.js +11 -0
  429. package/dist/esm/3d/negate-3d.d.ts +7 -0
  430. package/dist/esm/3d/negate-3d.js +6 -0
  431. package/dist/esm/3d/normalize-3d.d.ts +8 -0
  432. package/dist/esm/3d/normalize-3d.js +8 -0
  433. package/dist/esm/3d/one-3d.d.ts +6 -0
  434. package/dist/esm/3d/one-3d.js +5 -0
  435. package/dist/esm/3d/project-3d.d.ts +10 -0
  436. package/dist/esm/3d/project-3d.js +13 -0
  437. package/dist/esm/3d/random-3d.d.ts +7 -0
  438. package/dist/esm/3d/random-3d.js +7 -0
  439. package/dist/esm/3d/reflect-3d.d.ts +9 -0
  440. package/dist/esm/3d/reflect-3d.js +12 -0
  441. package/dist/esm/3d/rotate-x-3d.d.ts +9 -0
  442. package/dist/esm/3d/rotate-x-3d.js +22 -0
  443. package/dist/esm/3d/rotate-y-3d.d.ts +9 -0
  444. package/dist/esm/3d/rotate-y-3d.js +22 -0
  445. package/dist/esm/3d/rotate-z-3d.d.ts +9 -0
  446. package/dist/esm/3d/rotate-z-3d.js +22 -0
  447. package/dist/esm/3d/set-magnitude-3d.d.ts +9 -0
  448. package/dist/esm/3d/set-magnitude-3d.js +9 -0
  449. package/dist/esm/3d/subtract-3d.d.ts +8 -0
  450. package/dist/esm/3d/subtract-3d.js +11 -0
  451. package/dist/esm/3d/types.d.ts +4 -0
  452. package/dist/esm/3d/types.js +1 -0
  453. package/dist/esm/3d/zero-3d.d.ts +6 -0
  454. package/dist/esm/3d/zero-3d.js +5 -0
  455. package/dist/esm/4d/add-4d.d.ts +8 -0
  456. package/dist/esm/4d/add-4d.js +12 -0
  457. package/dist/esm/4d/angle-between-4d.d.ts +10 -0
  458. package/dist/esm/4d/angle-between-4d.js +11 -0
  459. package/dist/esm/4d/angle-w-4d.d.ts +7 -0
  460. package/dist/esm/4d/angle-w-4d.js +6 -0
  461. package/dist/esm/4d/angle-x-4d.d.ts +7 -0
  462. package/dist/esm/4d/angle-x-4d.js +6 -0
  463. package/dist/esm/4d/angle-y-4d.d.ts +7 -0
  464. package/dist/esm/4d/angle-y-4d.js +6 -0
  465. package/dist/esm/4d/angle-z-4d.d.ts +7 -0
  466. package/dist/esm/4d/angle-z-4d.js +6 -0
  467. package/dist/esm/4d/clamp-4d.d.ts +10 -0
  468. package/dist/esm/4d/clamp-4d.js +14 -0
  469. package/dist/esm/4d/clone-4d.d.ts +7 -0
  470. package/dist/esm/4d/clone-4d.js +6 -0
  471. package/dist/esm/4d/distance-4d.d.ts +8 -0
  472. package/dist/esm/4d/distance-4d.js +7 -0
  473. package/dist/esm/4d/distance-chebyshev-4d.d.ts +8 -0
  474. package/dist/esm/4d/distance-chebyshev-4d.js +19 -0
  475. package/dist/esm/4d/distance-manhattan-4d.d.ts +8 -0
  476. package/dist/esm/4d/distance-manhattan-4d.js +10 -0
  477. package/dist/esm/4d/distance-minkowski-4d.d.ts +9 -0
  478. package/dist/esm/4d/distance-minkowski-4d.js +12 -0
  479. package/dist/esm/4d/distance-sq-4d.d.ts +9 -0
  480. package/dist/esm/4d/distance-sq-4d.js +8 -0
  481. package/dist/esm/4d/divide-4d.d.ts +8 -0
  482. package/dist/esm/4d/divide-4d.js +12 -0
  483. package/dist/esm/4d/dot-4d.d.ts +8 -0
  484. package/dist/esm/4d/dot-4d.js +7 -0
  485. package/dist/esm/4d/from-object-4d.d.ts +12 -0
  486. package/dist/esm/4d/from-object-4d.js +11 -0
  487. package/dist/esm/4d/immutable-4d.d.ts +7 -0
  488. package/dist/esm/4d/immutable-4d.js +6 -0
  489. package/dist/esm/4d/index.d.ts +44 -0
  490. package/dist/esm/4d/index.js +44 -0
  491. package/dist/esm/4d/is-equal-4d.d.ts +8 -0
  492. package/dist/esm/4d/is-equal-4d.js +7 -0
  493. package/dist/esm/4d/is-equal-approx-4d.d.ts +9 -0
  494. package/dist/esm/4d/is-equal-approx-4d.js +11 -0
  495. package/dist/esm/4d/is-infinite-4d.d.ts +7 -0
  496. package/dist/esm/4d/is-infinite-4d.js +13 -0
  497. package/dist/esm/4d/is-nan-4d.d.ts +7 -0
  498. package/dist/esm/4d/is-nan-4d.js +6 -0
  499. package/dist/esm/4d/is-opposite-4d.d.ts +8 -0
  500. package/dist/esm/4d/is-opposite-4d.js +7 -0
  501. package/dist/esm/4d/is-zero-4d.d.ts +7 -0
  502. package/dist/esm/4d/is-zero-4d.js +6 -0
  503. package/dist/esm/4d/lerp-4d.d.ts +9 -0
  504. package/dist/esm/4d/lerp-4d.js +13 -0
  505. package/dist/esm/4d/limit-max-4d.d.ts +9 -0
  506. package/dist/esm/4d/limit-max-4d.js +9 -0
  507. package/dist/esm/4d/limit-min-4d.d.ts +9 -0
  508. package/dist/esm/4d/limit-min-4d.js +9 -0
  509. package/dist/esm/4d/look-at-4d.d.ts +10 -0
  510. package/dist/esm/4d/look-at-4d.js +10 -0
  511. package/dist/esm/4d/magnitude-4d.d.ts +7 -0
  512. package/dist/esm/4d/magnitude-4d.js +6 -0
  513. package/dist/esm/4d/magnitude-sq-4d.d.ts +8 -0
  514. package/dist/esm/4d/magnitude-sq-4d.js +7 -0
  515. package/dist/esm/4d/multiply-4d.d.ts +8 -0
  516. package/dist/esm/4d/multiply-4d.js +12 -0
  517. package/dist/esm/4d/negate-4d.d.ts +7 -0
  518. package/dist/esm/4d/negate-4d.js +6 -0
  519. package/dist/esm/4d/normalize-4d.d.ts +8 -0
  520. package/dist/esm/4d/normalize-4d.js +13 -0
  521. package/dist/esm/4d/one-4d.d.ts +6 -0
  522. package/dist/esm/4d/one-4d.js +5 -0
  523. package/dist/esm/4d/project-4d.d.ts +10 -0
  524. package/dist/esm/4d/project-4d.js +14 -0
  525. package/dist/esm/4d/random-4d.d.ts +7 -0
  526. package/dist/esm/4d/random-4d.js +17 -0
  527. package/dist/esm/4d/reflect-4d.d.ts +9 -0
  528. package/dist/esm/4d/reflect-4d.js +17 -0
  529. package/dist/esm/4d/set-magnitude-4d.d.ts +9 -0
  530. package/dist/esm/4d/set-magnitude-4d.js +14 -0
  531. package/dist/esm/4d/subtract-4d.d.ts +8 -0
  532. package/dist/esm/4d/subtract-4d.js +12 -0
  533. package/dist/esm/4d/types.d.ts +4 -0
  534. package/dist/esm/4d/types.js +1 -0
  535. package/dist/esm/4d/zero-4d.d.ts +6 -0
  536. package/dist/esm/4d/zero-4d.js +5 -0
  537. package/dist/esm/index.d.ts +7 -0
  538. package/dist/esm/index.js +7 -0
  539. package/dist/esm/slerp.d.ts +21 -0
  540. package/dist/esm/slerp.js +23 -0
  541. package/dist/{vec4.d.ts → esm/vec2.d.ts} +165 -157
  542. package/dist/{vec2.js → esm/vec2.js} +14 -6
  543. package/dist/esm/vec3.d.ts +614 -0
  544. package/dist/{vec3.js → esm/vec3.js} +190 -123
  545. package/dist/esm/vec4.d.ts +602 -0
  546. package/dist/{vec4.js → esm/vec4.js} +211 -130
  547. package/docs/ArrayVector2D.md +1090 -0
  548. package/docs/ArrayVector3D.md +1162 -0
  549. package/docs/ArrayVector4D.md +1019 -0
  550. package/docs/README.md +13 -0
  551. package/docs/Slerp.md +64 -0
  552. package/docs/Vec2.md +1827 -0
  553. package/docs/Vec3.md +2084 -0
  554. package/docs/Vec4.md +2031 -0
  555. package/package.json +95 -70
  556. package/VEC2.md +0 -147
  557. package/VEC3.md +0 -159
  558. package/VEC4.md +0 -146
  559. package/dist/index.d.ts +0 -3
  560. package/dist/index.js +0 -3
package/README.md CHANGED
@@ -1,85 +1,208 @@
1
- # @fimbul-works/vec
2
-
3
- A high-performance TypeScript vector math library providing 2D, 3D, and 4D vector operations with a focus on performance and type safety.
4
-
5
- [![npm version](https://badge.fury.io/js/%40fimbul-works%2Fvec.svg)](https://www.npmjs.com/package/@fimbul-works/vec)
6
- [![TypeScript](https://badges.frapsoft.com/typescript/code/typescript.svg?v=101)](https://github.com/microsoft/TypeScript)
7
-
8
- ## Features
9
-
10
- - 🚀 **Optimized Performance**: Uses `Float64Array` with magnitude caching and private fields
11
- - 🛡️ **Type Safety**: Full TypeScript support with strict typing and readonly options
12
- - 📏 **Multiple Distance Metrics**: Euclidean, Manhattan, Chebyshev, and Minkowski
13
- - 🔒 **Immutability Support**: Both mutable and immutable operation modes
14
- - 🎮 **Graphics Ready**: Homogeneous coordinates and transformation support
15
- - 🧮 **Math Features**: Comprehensive geometric and arithmetic operations
16
- - ⚡ **Memory Efficient**: Zero-allocation options for performance-critical code
17
-
18
- ## Installation
19
-
20
- ```bash
21
- npm install @fimbul-works/vec
22
- ```
23
-
24
- ## Quick Start
25
-
26
- ```typescript
27
- import { Vec2, Vec3, Vec4 } from "@fimbul-works/vec";
28
-
29
- // Create and manipulate vectors
30
- const position = new Vec2(100, 200);
31
- const direction = new Vec2(1, 0).rotate(Math.PI / 4);
32
- const movement = Vec2.scale(direction, 5);
33
-
34
- position.add(movement);
35
-
36
- // 3D graphics with homogeneous coordinates
37
- const point = new Vec4(x, y, z, 1); // Point in 3D space
38
- const vector = new Vec4(dx, dy, dz, 0); // Direction in 3D space
39
- ```
40
-
41
- ## Zero-Allocation Usage
42
-
43
- ```typescript
44
- // Reuse vectors to avoid garbage collection
45
- const result = new Vec2();
46
- const temp = new Vec2();
47
-
48
- // Chain operations without creating intermediates
49
- position
50
- .add(velocity.scale(deltaTime, temp))
51
- .clamp(0, 100);
52
- ```
53
-
54
- ## Core Operations
55
-
56
- ```typescript
57
- // Static operations (immutable)
58
- const sum = Vec2.add(v1, v2);
59
- const dot = Vec3.dot(v1, v2);
60
- const cross = Vec3.cross(v1, v2);
61
-
62
- // Method chaining (mutable)
63
- const result = new Vec3(1, 0, 0)
64
- .rotate(angle)
65
- .scale(2)
66
- .normalize();
67
-
68
- // Distance calculations
69
- const dist = v1.distance(v2);
70
- const manhattan = v1.distanceManhattan(v2);
71
- ```
72
-
73
- ## Complete API Documentation
74
-
75
- - [Vec2 API Documentation](./VEC2.md)
76
- - [Vec3 API Documentation](./VEC3.md)
77
- - [Vec4 API Documentation](./VEC4.md)
78
-
79
- ## License
80
-
81
- MIT License - See [LICENSE](LICENSE) file for details.
82
-
83
- ---
84
-
85
- Built with ⚡ by [FimbulWorks](https://github.com/fimbul-works)
1
+ # @fimbul-works/vec
2
+
3
+ A high-performance TypeScript vector math library providing both **functional** and **object-oriented** APIs for 2D, 3D, and 4D vector operations with a focus on performance, type safety, and immutability.
4
+
5
+ [![npm version](https://badge.fury.io/js/%40fimbul-works%2Fvec.svg)](https://www.npmjs.com/package/@fimbul-works/vec)
6
+ [![TypeScript](https://badges.frapsoft.com/typescript/code/typescript.svg?v=101)](https://github.com/microsoft/TypeScript)
7
+
8
+ ## ✨ Highlights
9
+
10
+ - **🎯 Two API Styles**: Choose between modern functional API (arrays) or classic OOP API (classes)
11
+ - **🛡️ Type Safe**: Full TypeScript support with strict typing and array tuple types
12
+ - **📏 Multiple Distance Metrics**: Euclidean, Manhattan, Chebyshev, and Minkowski
13
+ - **🎮 Graphics Ready**: Homogeneous coordinates and RGB/RGBA color support
14
+ - **🧮 Comprehensive**: Complete set of vector operations for game dev, graphics, and physics
15
+ - **🌳 Tree-Shakeable**: Import only what you need with the functional API
16
+
17
+ ## 📦 Installation
18
+
19
+ ```bash
20
+ npm install @fimbul-works/vec
21
+ ```
22
+
23
+ ## 🚀 Quick Start
24
+
25
+ ### Functional API (Recommended)
26
+
27
+ The **functional API** uses array tuples and is recommended for new projects:
28
+
29
+ ```typescript
30
+ // Import the functional API
31
+ import { add2D, magnitude2D, dot2D, normalize2D } from "@fimbul-works/vec/2d";
32
+ import { add3D, cross3D } from "@fimbul-works/vec/3d";
33
+
34
+ // Type: ArrayVector2D = [number, number]
35
+ const position: ArrayVector2D = [100, 200];
36
+ const velocity: ArrayVector2D = [5, 10];
37
+
38
+ // Immutable operations return new arrays
39
+ const newPosition = add2D(position, velocity); // [105, 210]
40
+ const speed = magnitude2D(velocity); // 11.18...
41
+
42
+ // 3D operations
43
+ const v1: ArrayVector3D = [1, 2, 3];
44
+ const v2: ArrayVector3D = [4, 5, 6];
45
+ const sum = add3D(v1, v2); // [5, 7, 9]
46
+ const cross = cross3D(v1, v2); // [-3, 6, -3]
47
+
48
+ // Chain operations functionally
49
+ const result = normalize2D(add2D(position, velocity));
50
+ ```
51
+
52
+ **Benefits of the Functional API:**
53
+ - ✅ Immutable - data never changes unexpectedly
54
+ - Tree-shakeable - smaller bundles
55
+ - ✅ Simple - just functions and arrays
56
+ - ✅ Pattern-matching ready - works with destructuring
57
+
58
+ ### OOP API (Legacy)
59
+
60
+ The **OOP API** uses mutable classes and is maintained for backward compatibility:
61
+
62
+ ```typescript
63
+ import { Vec2, Vec3, Vec4 } from "@fimbul-works/vec";
64
+
65
+ // Create and manipulate vectors
66
+ const position = new Vec2(100, 200);
67
+ const velocity = new Vec2(5, 10);
68
+
69
+ position.add(velocity); // Mutates position
70
+
71
+ // Method chaining
72
+ const result = new Vec3(1, 0, 0)
73
+ .rotateY(Math.PI / 4)
74
+ .scale(2)
75
+ .normalize();
76
+
77
+ // 3D graphics with homogeneous coordinates
78
+ const point = new Vec4(x, y, z, 1); // Point in 3D space
79
+ const vector = new Vec4(dx, dy, dz, 0); // Direction in 3D space
80
+
81
+ // Color manipulation with RGB accessors
82
+ const color = new Vec3(0.8, 0.2, 0.4);
83
+ color.r = 1.0; // Set red component
84
+ ```
85
+
86
+ ## 📖 API Documentation
87
+
88
+ Complete API documentation generated by TypeDoc:
89
+
90
+ ### Functional API
91
+ - **[2D Vector Functions](./docs/ArrayVector2D.md)** - Complete 2D functional API reference
92
+ - **[3D Vector Functions](./docs/ArrayVector3D.md)** - Complete 3D functional API reference
93
+ - **[4D Vector Functions](./docs/ArrayVector4D.md)** - Complete 4D functional API reference
94
+ - **[Spherical Interpolation Functions](./docs/Slerp.md)** - Spherical Interpolation API reference
95
+
96
+ ### OOP API (Legacy)
97
+ - **[Vec2 Class](./docs/Vec2.md)** - Complete Vec2 class documentation
98
+ - **[Vec3 Class](./docs/Vec3.md)** - Complete Vec3 class documentation
99
+ - **[Vec4 Class](./docs/Vec4.md)** - Complete Vec4 class documentation
100
+
101
+ ## 🎯 Common Operations
102
+
103
+ ### Functional API Examples
104
+
105
+ ```typescript
106
+ import {
107
+ add2D, subtract2D, multiply2D, divide2D,
108
+ dot2D, cross2D,
109
+ magnitude2D, normalize2D, negate2D,
110
+ distance2D, distanceManhattan2D, distanceChebyshev2D,
111
+ lerp2D, clamp2D, limitMax2D, limitMin2D,
112
+ rotate2D, reflect2D, project2D,
113
+ angleBetween2D, angleX2D, angleY2D
114
+ } from "@fimbul-works/vec/2d";
115
+
116
+ // Vector arithmetic
117
+ const v1: ArrayVector2D = [3, 4];
118
+ const v2: ArrayVector2D = [1, 2];
119
+
120
+ add2D(v1, v2); // [4, 6] - Addition
121
+ subtract2D(v1, v2); // [2, 2] - Subtraction
122
+ multiply2D(v1, v2); // [3, 8] - Component-wise multiplication
123
+ divide2D(v1, v2); // [3, 2] - Component-wise division
124
+
125
+ // Products
126
+ dot2D(v1, v2); // 11 - Dot product
127
+ cross2D(v1, v2); // 2 - 2D cross product (returns scalar)
128
+
129
+ // Magnitude & normalization
130
+ magnitude2D(v1); // 5 - Vector length
131
+ normalize2D(v1); // [0.6, 0.8] - Unit vector
132
+ negate2D(v1); // [-3, -4] - Opposite direction
133
+
134
+ // Distance metrics
135
+ distance2D(v1, v2); // 3.606 - Euclidean distance
136
+ distanceManhattan2D(v1, v2); // 4 - Manhattan distance
137
+ distanceChebyshev2D(v1, v2); // 2 - Chebyshev distance
138
+
139
+ // Interpolation & clamping
140
+ lerp2D(v1, v2, 0.5); // [2, 3] - Linear interpolation
141
+ clamp2D(v1, 2, 8); // Keeps magnitude between 2 and 8
142
+ limitMax2D(v1, 3); // Limits magnitude to maximum of 3
143
+ limitMin2D(v1, 6); // Ensures magnitude is at least 6
144
+
145
+ // Rotation & reflection
146
+ rotate2D(v1, Math.PI / 2); // [-4, 3] - Rotate 90°
147
+ reflect2D(v1, v2); // Reflection
148
+
149
+ // Angles
150
+ angleBetween2D(v1, v2); // Angle between vectors in radians
151
+ angleX2D(v1); // Angle with x-axis
152
+ ```
153
+
154
+ ### Homogeneous Coordinates (4D)
155
+
156
+ ```typescript
157
+ // 3D point: w = 1
158
+ const point: ArrayVector4D = [x, y, z, 1];
159
+
160
+ // 3D direction: w = 0
161
+ const direction: ArrayVector4D = [dx, dy, dz, 0];
162
+ ```
163
+
164
+ ## 🔄 Migration from OOP to Functional
165
+
166
+ Migrating from the OOP API to the functional API is straightforward:
167
+
168
+ | OOP (Vec2) | Functional (2D) |
169
+ |-----------|-----------------|
170
+ | `new Vec2(x, y)` | `[x, y]` as `ArrayVector2D` |
171
+ | `Vec2.add(v1, v2)` | `add2D(v1, v2)` |
172
+ | `v1.add(v2)` | `add2D(v1, v2)` |
173
+ | `v.x` | `v[0]` |
174
+ | `v.y` | `v[1]` |
175
+ | `v.magnitude` | `magnitude2D(v)` |
176
+ | `v.normalize()` | `normalize2D(v)` |
177
+
178
+ **Key differences:**
179
+ - Functional API is **immutable** - returns new arrays instead of mutating
180
+ - Uses **array indexing** `[0], [1]` instead of properties `.x, .y`
181
+ - Functions are **standalone** instead of class methods
182
+
183
+ ## 📦 Import Paths
184
+
185
+ ```typescript
186
+ // Functional API (Recommended)
187
+ import { add2D } from "@fimbul-works/vec/2d";
188
+ import { add3D } from "@fimbul-works/vec/3d";
189
+ import { add4D } from "@fimbul-works/vec/4d";
190
+
191
+ // OOP API (Legacy)
192
+ import { Vec2 } from "@fimbul-works/vec/vec2";
193
+ import { Vec3 } from "@fimbul-works/vec/vec3";
194
+ import { Vec4 } from "@fimbul-works/vec/vec4";
195
+
196
+ // Types
197
+ import type { ArrayVector2D } from "@fimbul-works/vec/2d";
198
+ import type { ArrayVector3D } from "@fimbul-works/vec/3d";
199
+ import type { ArrayVector4D } from "@fimbul-works/vec/4d";
200
+ ```
201
+
202
+ ## 📄 License
203
+
204
+ MIT License - See [LICENSE](LICENSE) file for details.
205
+
206
+ ---
207
+
208
+ Built with ⚡ by [FimbulWorks](https://github.com/fimbul-works)
@@ -0,0 +1,8 @@
1
+ import type { ArrayVector2D } from "./types.js";
2
+ /**
3
+ * Adds one 2D vectors.
4
+ * @param {ArrayVector2D} xy1 - First vector as `[x, y]`
5
+ * @param {ArrayVector2D} xy2 - Second vector as `[x, y]`
6
+ * @returns {ArrayVector2D} The sum of the vectors
7
+ */
8
+ export declare const add2D: (xy1: ArrayVector2D, xy2: ArrayVector2D) => ArrayVector2D;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.add2D = void 0;
4
+ /**
5
+ * Adds one 2D vectors.
6
+ * @param {ArrayVector2D} xy1 - First vector as `[x, y]`
7
+ * @param {ArrayVector2D} xy2 - Second vector as `[x, y]`
8
+ * @returns {ArrayVector2D} The sum of the vectors
9
+ */
10
+ const add2D = (xy1, xy2) => [xy1[0] + xy2[0], xy1[1] + xy2[1]];
11
+ exports.add2D = add2D;
@@ -0,0 +1,8 @@
1
+ import type { ArrayVector2D } from "./types.js";
2
+ /**
3
+ * Calculates the angle between two 2D vectors.
4
+ * @param {ArrayVector2D} xy1 - First vector as `[x, y]`
5
+ * @param {ArrayVector2D} xy2 - Second vector as `[x, y]`
6
+ * @returns {number} Angle between the vectors in radians
7
+ */
8
+ export declare const angleBetween2D: (xy1: ArrayVector2D, xy2: ArrayVector2D) => number;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.angleBetween2D = void 0;
4
+ /**
5
+ * Calculates the angle between two 2D vectors.
6
+ * @param {ArrayVector2D} xy1 - First vector as `[x, y]`
7
+ * @param {ArrayVector2D} xy2 - Second vector as `[x, y]`
8
+ * @returns {number} Angle between the vectors in radians
9
+ */
10
+ const angleBetween2D = (xy1, xy2) => Math.atan2(xy1[0] * xy2[1] - xy1[1] * xy2[0], xy1[0] * xy2[0] + xy1[1] * xy2[1]);
11
+ exports.angleBetween2D = angleBetween2D;
@@ -0,0 +1,7 @@
1
+ import type { ArrayVector2D } from "./types.js";
2
+ /**
3
+ * Gets the angle between a 2D vector and the positive x-axis in radians.
4
+ * @param {ArrayVector2D} xy - Vector as `[x, y]`
5
+ * @returns {number} Angle in radians, always in the range [0, 2π)
6
+ */
7
+ export declare const angleX2D: (xy: ArrayVector2D) => number;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.angleX2D = void 0;
4
+ /**
5
+ * Gets the angle between a 2D vector and the positive x-axis in radians.
6
+ * @param {ArrayVector2D} xy - Vector as `[x, y]`
7
+ * @returns {number} Angle in radians, always in the range [0, 2π)
8
+ */
9
+ const angleX2D = (xy) => Math.atan2(xy[1], xy[0] + (xy[1] < 0 ? Math.PI : 0));
10
+ exports.angleX2D = angleX2D;
@@ -0,0 +1,7 @@
1
+ import type { ArrayVector2D } from "./types.js";
2
+ /**
3
+ * Gets the angle between a 2D vector and the positive y-axis in radians.
4
+ * @param {ArrayVector2D} xy - Vector as `[x, y]`
5
+ * @returns {number} Angle in radians, always in the range [0, 2π)
6
+ */
7
+ export declare const angleY2D: (xy: ArrayVector2D) => number;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.angleY2D = void 0;
4
+ /**
5
+ * Gets the angle between a 2D vector and the positive y-axis in radians.
6
+ * @param {ArrayVector2D} xy - Vector as `[x, y]`
7
+ * @returns {number} Angle in radians, always in the range [0, 2π)
8
+ */
9
+ const angleY2D = (xy) => Math.atan2(xy[0], xy[1] + (xy[0] < 0 ? Math.PI : 0));
10
+ exports.angleY2D = angleY2D;
@@ -0,0 +1,10 @@
1
+ import type { ArrayVector2D } from "./types.js";
2
+ /**
3
+ * Clamps the magnitude of a 2D vector between a minimum and maximum value.
4
+ * @param {ArrayVector2D} xy - Vector as `[x, y]`
5
+ * @param {number} min - Minimum magnitude
6
+ * @param {number} max - Maximum magnitude
7
+ * @param {number} [m] - Optional current magnitude (default: `magnitude2D(xy)`)
8
+ * @returns {ArrayVector2D} The clamped vector
9
+ */
10
+ export declare const clamp2D: (xy: ArrayVector2D, min: number, max: number, m?: number) => ArrayVector2D;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.clamp2D = void 0;
4
+ const magnitude_2d_js_1 = require("./magnitude-2d.js");
5
+ /**
6
+ * Clamps the magnitude of a 2D vector between a minimum and maximum value.
7
+ * @param {ArrayVector2D} xy - Vector as `[x, y]`
8
+ * @param {number} min - Minimum magnitude
9
+ * @param {number} max - Maximum magnitude
10
+ * @param {number} [m] - Optional current magnitude (default: `magnitude2D(xy)`)
11
+ * @returns {ArrayVector2D} The clamped vector
12
+ */
13
+ const clamp2D = (xy, min, max, m = (0, magnitude_2d_js_1.magnitude2D)(xy)) => m > max ? [(xy[0] / m) * max, (xy[1] / m) * max] : m < min ? [(xy[0] / m) * min, (xy[1] / m) * min] : xy;
14
+ exports.clamp2D = clamp2D;
@@ -0,0 +1,7 @@
1
+ import type { ArrayVector2D } from "./types.js";
2
+ /**
3
+ * Clone a 2D vector.
4
+ * @param {ArrayVector2D} xy - Vector as `[x, y]`
5
+ * @returns {ArrayVector2D} The cloned vector
6
+ */
7
+ export declare const clone2D: (xy: ArrayVector2D) => ArrayVector2D;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.clone2D = void 0;
4
+ /**
5
+ * Clone a 2D vector.
6
+ * @param {ArrayVector2D} xy - Vector as `[x, y]`
7
+ * @returns {ArrayVector2D} The cloned vector
8
+ */
9
+ const clone2D = (xy) => [xy[0], xy[1]];
10
+ exports.clone2D = clone2D;
@@ -0,0 +1,8 @@
1
+ import type { ArrayVector2D } from "./types.js";
2
+ /**
3
+ * Calculates the cross product of two 2D vectors.
4
+ * @param {ArrayVector2D} xy1 - First vector as `[x, y]`
5
+ * @param {ArrayVector2D} xy2 - Second vector as `[x, y]`
6
+ * @returns {number} Cross product
7
+ */
8
+ export declare const cross2D: (xy1: ArrayVector2D, xy2: ArrayVector2D) => number;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cross2D = void 0;
4
+ /**
5
+ * Calculates the cross product of two 2D vectors.
6
+ * @param {ArrayVector2D} xy1 - First vector as `[x, y]`
7
+ * @param {ArrayVector2D} xy2 - Second vector as `[x, y]`
8
+ * @returns {number} Cross product
9
+ */
10
+ const cross2D = (xy1, xy2) => xy1[0] * xy2[1] - xy1[1] * xy2[0];
11
+ exports.cross2D = cross2D;
@@ -0,0 +1,8 @@
1
+ import type { ArrayVector2D } from "./types.js";
2
+ /**
3
+ * Calculate the Euclidean distance between two 2D vectors.
4
+ * @param {ArrayVector2D} xy1 - First vector as `[x, y]`
5
+ * @param {ArrayVector2D} xy2 - Second vector as `[x, y]`
6
+ * @returns {number} Euclidean distance
7
+ */
8
+ export declare const distance2D: (xy1: ArrayVector2D, xy2: ArrayVector2D) => number;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.distance2D = void 0;
4
+ /**
5
+ * Calculate the Euclidean distance between two 2D vectors.
6
+ * @param {ArrayVector2D} xy1 - First vector as `[x, y]`
7
+ * @param {ArrayVector2D} xy2 - Second vector as `[x, y]`
8
+ * @returns {number} Euclidean distance
9
+ */
10
+ const distance2D = (xy1, xy2) => Math.sqrt((xy2[0] - xy1[0]) ** 2 + (xy2[1] - xy1[1]) ** 2);
11
+ exports.distance2D = distance2D;
@@ -0,0 +1,8 @@
1
+ import type { ArrayVector2D } from "./types.js";
2
+ /**
3
+ * Calculates the Chebyshev distance between two 2D vectors.
4
+ * @param {ArrayVector2D} xy1 - First vector as `[x, y]`
5
+ * @param {ArrayVector2D} xy2 - Second vector as `[x, y]`
6
+ * @returns {number} Chebyshev distance
7
+ */
8
+ export declare const distanceChebyshev2D: (xy1: ArrayVector2D, xy2: ArrayVector2D) => number;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.distanceChebyshev2D = void 0;
4
+ /**
5
+ * Calculates the Chebyshev distance between two 2D vectors.
6
+ * @param {ArrayVector2D} xy1 - First vector as `[x, y]`
7
+ * @param {ArrayVector2D} xy2 - Second vector as `[x, y]`
8
+ * @returns {number} Chebyshev distance
9
+ */
10
+ const distanceChebyshev2D = (xy1, xy2) => {
11
+ const absX = Math.abs(xy1[0] - xy2[0]);
12
+ const absY = Math.abs(xy1[1] - xy2[1]);
13
+ return absX >= absY ? absX : absY;
14
+ };
15
+ exports.distanceChebyshev2D = distanceChebyshev2D;
@@ -0,0 +1,8 @@
1
+ import type { ArrayVector2D } from "./types.js";
2
+ /**
3
+ * Calculates the Manhattan distance between two 2D vectors.
4
+ * @param {ArrayVector2D} xy1 - First vector as `[x, y]`
5
+ * @param {ArrayVector2D} xy2 - Second vector as `[x, y]`
6
+ * @returns {number} Manhattan distance
7
+ */
8
+ export declare const distanceManhattan2D: (xy1: ArrayVector2D, xy2: ArrayVector2D) => number;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.distanceManhattan2D = void 0;
4
+ /**
5
+ * Calculates the Manhattan distance between two 2D vectors.
6
+ * @param {ArrayVector2D} xy1 - First vector as `[x, y]`
7
+ * @param {ArrayVector2D} xy2 - Second vector as `[x, y]`
8
+ * @returns {number} Manhattan distance
9
+ */
10
+ const distanceManhattan2D = (xy1, xy2) => Math.abs(xy2[0] - xy1[0]) + Math.abs(xy2[1] - xy1[1]);
11
+ exports.distanceManhattan2D = distanceManhattan2D;
@@ -0,0 +1,9 @@
1
+ import type { ArrayVector2D } from "./types.js";
2
+ /**
3
+ * Calculates the Minkowski distance between two 2D vectors.
4
+ * @param {ArrayVector2D} xy1 - First vector as `[x, y]`
5
+ * @param {ArrayVector2D} xy2 - Second vector as `[x, y]`
6
+ * @param {number} p - Order of the Minkowski distance
7
+ * @returns {number} Minkowski distance
8
+ */
9
+ export declare const distanceMinkowski2D: (xy1: ArrayVector2D, xy2: ArrayVector2D, p: number) => number;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.distanceMinkowski2D = void 0;
4
+ /**
5
+ * Calculates the Minkowski distance between two 2D vectors.
6
+ * @param {ArrayVector2D} xy1 - First vector as `[x, y]`
7
+ * @param {ArrayVector2D} xy2 - Second vector as `[x, y]`
8
+ * @param {number} p - Order of the Minkowski distance
9
+ * @returns {number} Minkowski distance
10
+ */
11
+ const distanceMinkowski2D = (xy1, xy2, p) => (Math.abs(xy1[0] - xy2[0]) ** p + Math.abs(xy1[1] - xy2[1]) ** p) ** (1 / p);
12
+ exports.distanceMinkowski2D = distanceMinkowski2D;
@@ -0,0 +1,8 @@
1
+ import type { ArrayVector2D } from "./types.js";
2
+ /**
3
+ * Calculates the squared Euclidean distance between two 2D vectors.
4
+ * @param {ArrayVector2D} xy1 - First vector as `[x, y]`
5
+ * @param {ArrayVector2D} xy2 - Second vector as `[x, y]`
6
+ * @returns {number} Squared distance
7
+ */
8
+ export declare const distanceSq2D: (xy1: ArrayVector2D, xy2: ArrayVector2D) => number;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.distanceSq2D = void 0;
4
+ /**
5
+ * Calculates the squared Euclidean distance between two 2D vectors.
6
+ * @param {ArrayVector2D} xy1 - First vector as `[x, y]`
7
+ * @param {ArrayVector2D} xy2 - Second vector as `[x, y]`
8
+ * @returns {number} Squared distance
9
+ */
10
+ const distanceSq2D = (xy1, xy2) => (xy2[0] - xy1[0]) ** 2 + (xy2[1] - xy1[1]) ** 2;
11
+ exports.distanceSq2D = distanceSq2D;
@@ -0,0 +1,8 @@
1
+ import type { ArrayVector2D } from "./types.js";
2
+ /**
3
+ * Divides one 2D vector with another.
4
+ * @param {ArrayVector2D} xy1 - First vector as `[x, y]`
5
+ * @param {ArrayVector2D} xy2 - Second vector as `[x, y]`
6
+ * @returns {ArrayVector2D} The divided value
7
+ */
8
+ export declare const divide2D: (xy1: ArrayVector2D, xy2: ArrayVector2D) => ArrayVector2D;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.divide2D = void 0;
4
+ /**
5
+ * Divides one 2D vector with another.
6
+ * @param {ArrayVector2D} xy1 - First vector as `[x, y]`
7
+ * @param {ArrayVector2D} xy2 - Second vector as `[x, y]`
8
+ * @returns {ArrayVector2D} The divided value
9
+ */
10
+ const divide2D = (xy1, xy2) => [
11
+ xy2[0] === 0 ? Number.POSITIVE_INFINITY : xy1[0] / xy2[0],
12
+ xy2[1] === 0 ? Number.POSITIVE_INFINITY : xy1[1] / xy2[1],
13
+ ];
14
+ exports.divide2D = divide2D;
@@ -0,0 +1,8 @@
1
+ import type { ArrayVector2D } from "./types.js";
2
+ /**
3
+ * Calculates the dot product of two vectors.
4
+ * @param {ArrayVector2D} xy1 - First vector as `[x, y]`
5
+ * @param {ArrayVector2D} xy2 - Second vector as `[x, y]`
6
+ * @returns {number} Dot product
7
+ */
8
+ export declare const dot2D: (xy1: ArrayVector2D, xy2: ArrayVector2D) => number;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.dot2D = void 0;
4
+ /**
5
+ * Calculates the dot product of two vectors.
6
+ * @param {ArrayVector2D} xy1 - First vector as `[x, y]`
7
+ * @param {ArrayVector2D} xy2 - Second vector as `[x, y]`
8
+ * @returns {number} Dot product
9
+ */
10
+ const dot2D = (xy1, xy2) => xy1[0] * xy2[0] + xy1[1] * xy2[1];
11
+ exports.dot2D = dot2D;
@@ -0,0 +1,8 @@
1
+ import type { ArrayVector2D } from "./types.js";
2
+ /**
3
+ * Creates an ArrayVector2D from x-axis angle.
4
+ * @param {number} phi - Angle in radians
5
+ * @param {number} magnitude - Optional magnitude of the vector (default: `1`)
6
+ * @returns {ArrayVector2D} Vector
7
+ */
8
+ export declare const fromAngleX2D: (phi: number, magnitude?: number) => ArrayVector2D;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fromAngleX2D = void 0;
4
+ /**
5
+ * Creates an ArrayVector2D from x-axis angle.
6
+ * @param {number} phi - Angle in radians
7
+ * @param {number} magnitude - Optional magnitude of the vector (default: `1`)
8
+ * @returns {ArrayVector2D} Vector
9
+ */
10
+ const fromAngleX2D = (phi, magnitude = 1) => [
11
+ magnitude * Math.cos(phi),
12
+ magnitude * Math.sin(phi),
13
+ ];
14
+ exports.fromAngleX2D = fromAngleX2D;