@pawells/math-extended 1.0.1

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 (195) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +319 -0
  3. package/build/angles.d.ts +31 -0
  4. package/build/angles.d.ts.map +1 -0
  5. package/build/angles.js +85 -0
  6. package/build/angles.js.map +1 -0
  7. package/build/angles.spec.d.ts +2 -0
  8. package/build/angles.spec.d.ts.map +1 -0
  9. package/build/angles.spec.js +147 -0
  10. package/build/angles.spec.js.map +1 -0
  11. package/build/clamp.d.ts +17 -0
  12. package/build/clamp.d.ts.map +1 -0
  13. package/build/clamp.js +19 -0
  14. package/build/clamp.js.map +1 -0
  15. package/build/clamp.spec.d.ts +2 -0
  16. package/build/clamp.spec.d.ts.map +1 -0
  17. package/build/clamp.spec.js +19 -0
  18. package/build/clamp.spec.js.map +1 -0
  19. package/build/documentation-validation.spec.d.ts +11 -0
  20. package/build/documentation-validation.spec.d.ts.map +1 -0
  21. package/build/documentation-validation.spec.js +401 -0
  22. package/build/documentation-validation.spec.js.map +1 -0
  23. package/build/index.d.ts +8 -0
  24. package/build/index.d.ts.map +1 -0
  25. package/build/index.js +8 -0
  26. package/build/index.js.map +1 -0
  27. package/build/interpolation.d.ts +175 -0
  28. package/build/interpolation.d.ts.map +1 -0
  29. package/build/interpolation.js +369 -0
  30. package/build/interpolation.js.map +1 -0
  31. package/build/interpolation.spec.d.ts +2 -0
  32. package/build/interpolation.spec.d.ts.map +1 -0
  33. package/build/interpolation.spec.js +480 -0
  34. package/build/interpolation.spec.js.map +1 -0
  35. package/build/matrices/arithmetic.d.ts +411 -0
  36. package/build/matrices/arithmetic.d.ts.map +1 -0
  37. package/build/matrices/arithmetic.js +954 -0
  38. package/build/matrices/arithmetic.js.map +1 -0
  39. package/build/matrices/arithmetic.spec.d.ts +2 -0
  40. package/build/matrices/arithmetic.spec.d.ts.map +1 -0
  41. package/build/matrices/arithmetic.spec.js +915 -0
  42. package/build/matrices/arithmetic.spec.js.map +1 -0
  43. package/build/matrices/asserts.d.ts +306 -0
  44. package/build/matrices/asserts.d.ts.map +1 -0
  45. package/build/matrices/asserts.js +396 -0
  46. package/build/matrices/asserts.js.map +1 -0
  47. package/build/matrices/asserts.spec.d.ts +2 -0
  48. package/build/matrices/asserts.spec.d.ts.map +1 -0
  49. package/build/matrices/asserts.spec.js +565 -0
  50. package/build/matrices/asserts.spec.js.map +1 -0
  51. package/build/matrices/core.d.ts +168 -0
  52. package/build/matrices/core.d.ts.map +1 -0
  53. package/build/matrices/core.js +457 -0
  54. package/build/matrices/core.js.map +1 -0
  55. package/build/matrices/core.spec.d.ts +2 -0
  56. package/build/matrices/core.spec.d.ts.map +1 -0
  57. package/build/matrices/core.spec.js +634 -0
  58. package/build/matrices/core.spec.js.map +1 -0
  59. package/build/matrices/decompositions.d.ts +326 -0
  60. package/build/matrices/decompositions.d.ts.map +1 -0
  61. package/build/matrices/decompositions.js +816 -0
  62. package/build/matrices/decompositions.js.map +1 -0
  63. package/build/matrices/decompositions.spec.d.ts +2 -0
  64. package/build/matrices/decompositions.spec.d.ts.map +1 -0
  65. package/build/matrices/decompositions.spec.js +195 -0
  66. package/build/matrices/decompositions.spec.js.map +1 -0
  67. package/build/matrices/index.d.ts +9 -0
  68. package/build/matrices/index.d.ts.map +1 -0
  69. package/build/matrices/index.js +9 -0
  70. package/build/matrices/index.js.map +1 -0
  71. package/build/matrices/linear-algebra.d.ts +64 -0
  72. package/build/matrices/linear-algebra.d.ts.map +1 -0
  73. package/build/matrices/linear-algebra.js +253 -0
  74. package/build/matrices/linear-algebra.js.map +1 -0
  75. package/build/matrices/linear-algebra.spec.d.ts +2 -0
  76. package/build/matrices/linear-algebra.spec.d.ts.map +1 -0
  77. package/build/matrices/linear-algebra.spec.js +355 -0
  78. package/build/matrices/linear-algebra.spec.js.map +1 -0
  79. package/build/matrices/normalization.d.ts +62 -0
  80. package/build/matrices/normalization.d.ts.map +1 -0
  81. package/build/matrices/normalization.js +167 -0
  82. package/build/matrices/normalization.js.map +1 -0
  83. package/build/matrices/normalization.spec.d.ts +2 -0
  84. package/build/matrices/normalization.spec.d.ts.map +1 -0
  85. package/build/matrices/normalization.spec.js +335 -0
  86. package/build/matrices/normalization.spec.js.map +1 -0
  87. package/build/matrices/transformations.d.ts +484 -0
  88. package/build/matrices/transformations.d.ts.map +1 -0
  89. package/build/matrices/transformations.js +592 -0
  90. package/build/matrices/transformations.js.map +1 -0
  91. package/build/matrices/transformations.spec.d.ts +2 -0
  92. package/build/matrices/transformations.spec.d.ts.map +1 -0
  93. package/build/matrices/transformations.spec.js +755 -0
  94. package/build/matrices/transformations.spec.js.map +1 -0
  95. package/build/matrices/types.d.ts +134 -0
  96. package/build/matrices/types.d.ts.map +1 -0
  97. package/build/matrices/types.js +6 -0
  98. package/build/matrices/types.js.map +1 -0
  99. package/build/quaternions/asserts.d.ts +77 -0
  100. package/build/quaternions/asserts.d.ts.map +1 -0
  101. package/build/quaternions/asserts.js +175 -0
  102. package/build/quaternions/asserts.js.map +1 -0
  103. package/build/quaternions/asserts.spec.d.ts +2 -0
  104. package/build/quaternions/asserts.spec.d.ts.map +1 -0
  105. package/build/quaternions/asserts.spec.js +320 -0
  106. package/build/quaternions/asserts.spec.js.map +1 -0
  107. package/build/quaternions/conversions.d.ts +73 -0
  108. package/build/quaternions/conversions.d.ts.map +1 -0
  109. package/build/quaternions/conversions.js +179 -0
  110. package/build/quaternions/conversions.js.map +1 -0
  111. package/build/quaternions/conversions.spec.d.ts +2 -0
  112. package/build/quaternions/conversions.spec.d.ts.map +1 -0
  113. package/build/quaternions/conversions.spec.js +344 -0
  114. package/build/quaternions/conversions.spec.js.map +1 -0
  115. package/build/quaternions/core.d.ts +203 -0
  116. package/build/quaternions/core.d.ts.map +1 -0
  117. package/build/quaternions/core.js +374 -0
  118. package/build/quaternions/core.js.map +1 -0
  119. package/build/quaternions/core.spec.d.ts +2 -0
  120. package/build/quaternions/core.spec.d.ts.map +1 -0
  121. package/build/quaternions/core.spec.js +294 -0
  122. package/build/quaternions/core.spec.js.map +1 -0
  123. package/build/quaternions/index.d.ts +7 -0
  124. package/build/quaternions/index.d.ts.map +1 -0
  125. package/build/quaternions/index.js +7 -0
  126. package/build/quaternions/index.js.map +1 -0
  127. package/build/quaternions/interpolation.d.ts +54 -0
  128. package/build/quaternions/interpolation.d.ts.map +1 -0
  129. package/build/quaternions/interpolation.js +201 -0
  130. package/build/quaternions/interpolation.js.map +1 -0
  131. package/build/quaternions/interpolation.spec.d.ts +2 -0
  132. package/build/quaternions/interpolation.spec.d.ts.map +1 -0
  133. package/build/quaternions/interpolation.spec.js +64 -0
  134. package/build/quaternions/interpolation.spec.js.map +1 -0
  135. package/build/quaternions/predefined.d.ts +36 -0
  136. package/build/quaternions/predefined.d.ts.map +1 -0
  137. package/build/quaternions/predefined.js +42 -0
  138. package/build/quaternions/predefined.js.map +1 -0
  139. package/build/quaternions/predefined.spec.d.ts +2 -0
  140. package/build/quaternions/predefined.spec.d.ts.map +1 -0
  141. package/build/quaternions/predefined.spec.js +35 -0
  142. package/build/quaternions/predefined.spec.js.map +1 -0
  143. package/build/quaternions/types.d.ts +55 -0
  144. package/build/quaternions/types.d.ts.map +1 -0
  145. package/build/quaternions/types.js +7 -0
  146. package/build/quaternions/types.js.map +1 -0
  147. package/build/random.d.ts +66 -0
  148. package/build/random.d.ts.map +1 -0
  149. package/build/random.js +115 -0
  150. package/build/random.js.map +1 -0
  151. package/build/random.spec.d.ts +2 -0
  152. package/build/random.spec.d.ts.map +1 -0
  153. package/build/random.spec.js +267 -0
  154. package/build/random.spec.js.map +1 -0
  155. package/build/vectors/asserts.d.ts +182 -0
  156. package/build/vectors/asserts.d.ts.map +1 -0
  157. package/build/vectors/asserts.js +285 -0
  158. package/build/vectors/asserts.js.map +1 -0
  159. package/build/vectors/asserts.spec.d.ts +2 -0
  160. package/build/vectors/asserts.spec.d.ts.map +1 -0
  161. package/build/vectors/asserts.spec.js +260 -0
  162. package/build/vectors/asserts.spec.js.map +1 -0
  163. package/build/vectors/core.d.ts +507 -0
  164. package/build/vectors/core.d.ts.map +1 -0
  165. package/build/vectors/core.js +825 -0
  166. package/build/vectors/core.js.map +1 -0
  167. package/build/vectors/core.spec.d.ts +2 -0
  168. package/build/vectors/core.spec.d.ts.map +1 -0
  169. package/build/vectors/core.spec.js +343 -0
  170. package/build/vectors/core.spec.js.map +1 -0
  171. package/build/vectors/index.d.ts +6 -0
  172. package/build/vectors/index.d.ts.map +1 -0
  173. package/build/vectors/index.js +6 -0
  174. package/build/vectors/index.js.map +1 -0
  175. package/build/vectors/interpolation.d.ts +404 -0
  176. package/build/vectors/interpolation.d.ts.map +1 -0
  177. package/build/vectors/interpolation.js +585 -0
  178. package/build/vectors/interpolation.js.map +1 -0
  179. package/build/vectors/interpolation.spec.d.ts +2 -0
  180. package/build/vectors/interpolation.spec.d.ts.map +1 -0
  181. package/build/vectors/interpolation.spec.js +378 -0
  182. package/build/vectors/interpolation.spec.js.map +1 -0
  183. package/build/vectors/predefined.d.ts +191 -0
  184. package/build/vectors/predefined.d.ts.map +1 -0
  185. package/build/vectors/predefined.js +191 -0
  186. package/build/vectors/predefined.js.map +1 -0
  187. package/build/vectors/predefined.spec.d.ts +2 -0
  188. package/build/vectors/predefined.spec.d.ts.map +1 -0
  189. package/build/vectors/predefined.spec.js +333 -0
  190. package/build/vectors/predefined.spec.js.map +1 -0
  191. package/build/vectors/types.d.ts +62 -0
  192. package/build/vectors/types.d.ts.map +1 -0
  193. package/build/vectors/types.js +6 -0
  194. package/build/vectors/types.js.map +1 -0
  195. package/package.json +75 -0
@@ -0,0 +1,378 @@
1
+ import { VectorLERP, VectorSmoothStep, VectorSmootherStep, VectorQuadraticEaseIn, VectorQuadraticEaseOut, VectorCubicEaseIn, VectorCubicEaseOut, VectorCosineInterpolation, VectorSineEaseIn, VectorSineEaseOut, VectorExponentialEaseIn, VectorExponentialEaseOut, VectorElasticEaseOut, VectorBackEaseOut, VectorBounceEaseOut, VectorCatmullRomInterpolation, VectorHermiteInterpolation, VectorCircularEaseIn, VectorCircularEaseOut, VectorStepInterpolation, VectorSphericalLinearInterpolation } from './interpolation.js';
2
+ import { VectorError } from './asserts.js';
3
+ describe('Vector Interpolation', () => {
4
+ // Test vectors for different dimensions
5
+ const vec2a = [0, 0];
6
+ const vec2b = [10, 20];
7
+ const vec3a = [0, 0, 0];
8
+ const vec3b = [10, 20, 30];
9
+ const vec4a = [0, 0, 0, 0];
10
+ const vec4b = [10, 20, 30, 40];
11
+ // Helper function to check if values are approximately equal
12
+ const expectVectorToBeCloseTo = (actual, expected, precision = 5) => {
13
+ expect(actual.length).toBe(expected.length);
14
+ for (let i = 0; i < actual.length; i++) {
15
+ const actualValue = actual[i];
16
+ const expectedValue = expected[i];
17
+ if (actualValue !== undefined && expectedValue !== undefined) {
18
+ expect(actualValue).toBeCloseTo(expectedValue, precision);
19
+ }
20
+ }
21
+ };
22
+ describe('VectorLERP', () => {
23
+ it('should perform linear interpolation at t=0', () => {
24
+ expectVectorToBeCloseTo(VectorLERP(vec2a, vec2b, 0), [0, 0], 10);
25
+ expectVectorToBeCloseTo(VectorLERP(vec3a, vec3b, 0), [0, 0, 0], 10);
26
+ expectVectorToBeCloseTo(VectorLERP(vec4a, vec4b, 0), [0, 0, 0, 0], 10);
27
+ });
28
+ it('should perform linear interpolation at t=1', () => {
29
+ expectVectorToBeCloseTo(VectorLERP(vec2a, vec2b, 1), [10, 20], 10);
30
+ expectVectorToBeCloseTo(VectorLERP(vec3a, vec3b, 1), [10, 20, 30], 10);
31
+ expectVectorToBeCloseTo(VectorLERP(vec4a, vec4b, 1), [10, 20, 30, 40], 10);
32
+ });
33
+ it('should perform linear interpolation at t=0.5', () => {
34
+ expectVectorToBeCloseTo(VectorLERP(vec2a, vec2b, 0.5), [5, 10], 10);
35
+ expectVectorToBeCloseTo(VectorLERP(vec3a, vec3b, 0.5), [5, 10, 15], 10);
36
+ expectVectorToBeCloseTo(VectorLERP(vec4a, vec4b, 0.5), [5, 10, 15, 20], 10);
37
+ });
38
+ it('should handle extrapolation beyond [0,1]', () => {
39
+ expectVectorToBeCloseTo(VectorLERP(vec2a, vec2b, -0.5), [-5, -10], 10);
40
+ expectVectorToBeCloseTo(VectorLERP(vec2a, vec2b, 1.5), [15, 30], 10);
41
+ });
42
+ it('should throw for mismatched vector dimensions', () => {
43
+ expect(() => VectorLERP([1, 2], [1, 2, 3], 0.5)).toThrow(VectorError);
44
+ });
45
+ it('should throw for non-numeric t parameter', () => {
46
+ expect(() => VectorLERP(vec2a, vec2b, NaN)).toThrow();
47
+ });
48
+ it('should throw for invalid vector values', () => {
49
+ expect(() => VectorLERP([1, NaN], [1, 2], 0.5)).toThrow();
50
+ expect(() => VectorLERP([1, 2], [1, Infinity], 0.5)).toThrow();
51
+ });
52
+ it('should throw for empty vectors', () => {
53
+ expect(() => VectorLERP([], [], 0.5)).toThrow(VectorError);
54
+ });
55
+ it('should throw for vectors with Infinity', () => {
56
+ expect(() => VectorLERP([1, Infinity], [1, 2], 0.5)).toThrow(VectorError);
57
+ expect(() => VectorLERP([1, 2], [1, -Infinity], 0.5)).toThrow(VectorError);
58
+ });
59
+ });
60
+ describe('VectorSmoothStep', () => {
61
+ it('should return start vector at t=0', () => {
62
+ expect(VectorSmoothStep(vec2a, vec2b, 0)).toEqual([0, 0]);
63
+ });
64
+ it('should return end vector at t=1', () => {
65
+ expect(VectorSmoothStep(vec2a, vec2b, 1)).toEqual([10, 20]);
66
+ });
67
+ it('should provide smooth interpolation at t=0.5', () => {
68
+ const result = VectorSmoothStep(vec2a, vec2b, 0.5);
69
+ expectVectorToBeCloseTo(result, [5, 10]);
70
+ });
71
+ it('should have zero derivative at endpoints', () => {
72
+ // Test very close to endpoints to verify smooth start/end
73
+ const nearStart = VectorSmoothStep(vec2a, vec2b, 0.01);
74
+ const nearEnd = VectorSmoothStep(vec2a, vec2b, 0.99);
75
+ // Near start should be very close to start
76
+ expectVectorToBeCloseTo(nearStart, [0.00298, 0.00596], 4);
77
+ // Near end should be very close to end
78
+ expectVectorToBeCloseTo(nearEnd, [9.99702, 19.99404], 4);
79
+ });
80
+ it('should extrapolate for t < 0 and t > 1', () => {
81
+ expect(VectorSmoothStep(vec2a, vec2b, -1)).toEqual([50, 100]);
82
+ expect(VectorSmoothStep(vec2a, vec2b, 2)).toEqual([-40, -80]);
83
+ });
84
+ });
85
+ describe('VectorSmootherStep', () => {
86
+ it('should return start vector at t=0', () => {
87
+ expect(VectorSmootherStep(vec2a, vec2b, 0)).toEqual([0, 0]);
88
+ });
89
+ it('should return end vector at t=1', () => {
90
+ expect(VectorSmootherStep(vec2a, vec2b, 1)).toEqual([10, 20]);
91
+ });
92
+ it('should be smoother than SmoothStep', () => {
93
+ const smoothResult = VectorSmoothStep(vec2a, vec2b, 0.1);
94
+ const smootherResult = VectorSmootherStep(vec2a, vec2b, 0.1);
95
+ // SmootherStep should start even more gradually
96
+ expect(smootherResult[0]).toBeLessThan(smoothResult[0]);
97
+ });
98
+ it('should extrapolate for t < 0 and t > 1', () => {
99
+ expect(VectorSmootherStep(vec2a, vec2b, -1)).toEqual([-310, -620]);
100
+ expect(VectorSmootherStep(vec2a, vec2b, 2)).toEqual([320, 640]);
101
+ });
102
+ });
103
+ describe('VectorQuadraticEaseIn', () => {
104
+ it('should start slowly and accelerate', () => {
105
+ const result1 = VectorQuadraticEaseIn(vec2a, vec2b, 0.1);
106
+ const result2 = VectorQuadraticEaseIn(vec2a, vec2b, 0.5);
107
+ const result3 = VectorQuadraticEaseIn(vec2a, vec2b, 0.9);
108
+ // Should be closer to start at t=0.1 than linear interpolation
109
+ const linearResult1 = VectorLERP(vec2a, vec2b, 0.1);
110
+ expect(result1[0]).toBeLessThan(linearResult1[0]);
111
+ // Should be accelerating
112
+ expect(result2[0]).toBeCloseTo(2.5, 1);
113
+ expect(result3[0]).toBeCloseTo(8.1, 1);
114
+ });
115
+ it('should extrapolate for t < 0 and t > 1', () => {
116
+ expect(VectorQuadraticEaseIn(vec2a, vec2b, -1)).toEqual([10, 20]);
117
+ expect(VectorQuadraticEaseIn(vec2a, vec2b, 2)).toEqual([40, 80]);
118
+ });
119
+ });
120
+ describe('VectorQuadraticEaseOut', () => {
121
+ it('should start quickly and decelerate', () => {
122
+ const result1 = VectorQuadraticEaseOut(vec2a, vec2b, 0.1);
123
+ const result2 = VectorQuadraticEaseOut(vec2a, vec2b, 0.5);
124
+ const result3 = VectorQuadraticEaseOut(vec2a, vec2b, 0.9);
125
+ // Should be further from start at t=0.1 than linear interpolation
126
+ const linearResult1 = VectorLERP(vec2a, vec2b, 0.1);
127
+ expect(result1[0]).toBeGreaterThan(linearResult1[0]);
128
+ // Should be decelerating
129
+ expect(result2[0]).toBeCloseTo(7.5, 1);
130
+ expect(result3[0]).toBeCloseTo(9.9, 1);
131
+ });
132
+ it('should extrapolate for t < 0 and t > 1', () => {
133
+ expect(VectorQuadraticEaseOut(vec2a, vec2b, -1)).toEqual([-30, -60]);
134
+ expect(VectorQuadraticEaseOut(vec2a, vec2b, 2)).toEqual([0, 0]);
135
+ });
136
+ });
137
+ describe('VectorCubicEaseIn', () => {
138
+ it('should provide cubic acceleration curve', () => {
139
+ const result = VectorCubicEaseIn(vec2a, vec2b, 0.5);
140
+ expectVectorToBeCloseTo(result, [1.25, 2.5]);
141
+ });
142
+ it('should extrapolate for t < 0 and t > 1', () => {
143
+ expect(VectorCubicEaseIn(vec2a, vec2b, -1)).toEqual([-10, -20]);
144
+ expect(VectorCubicEaseIn(vec2a, vec2b, 2)).toEqual([80, 160]);
145
+ });
146
+ });
147
+ describe('VectorCubicEaseOut', () => {
148
+ it('should provide cubic deceleration curve', () => {
149
+ const result = VectorCubicEaseOut(vec2a, vec2b, 0.5);
150
+ expectVectorToBeCloseTo(result, [8.75, 17.5]);
151
+ });
152
+ it('should extrapolate for t < 0 and t > 1', () => {
153
+ expect(VectorCubicEaseOut(vec2a, vec2b, -1)).toEqual([-70, -140]);
154
+ expect(VectorCubicEaseOut(vec2a, vec2b, 2)).toEqual([20, 40]);
155
+ });
156
+ });
157
+ describe('VectorCosineInterpolation', () => {
158
+ it('should provide smooth cosine-based interpolation', () => {
159
+ const result = VectorCosineInterpolation(vec2a, vec2b, 0.5);
160
+ expectVectorToBeCloseTo(result, [5, 10]);
161
+ });
162
+ it('should be smooth at endpoints', () => {
163
+ const result0 = VectorCosineInterpolation(vec2a, vec2b, 0);
164
+ const result1 = VectorCosineInterpolation(vec2a, vec2b, 1);
165
+ expect(result0).toEqual([0, 0]);
166
+ expect(result1).toEqual([10, 20]);
167
+ });
168
+ });
169
+ describe('VectorSineEaseIn', () => {
170
+ it('should provide sine-based ease in', () => {
171
+ const result = VectorSineEaseIn(vec2a, vec2b, 0.5);
172
+ // Should be less than linear at 0.5
173
+ expect(result[0]).toBeLessThan(5);
174
+ });
175
+ });
176
+ describe('VectorSineEaseOut', () => {
177
+ it('should provide sine-based ease out', () => {
178
+ const result = VectorSineEaseOut(vec2a, vec2b, 0.5);
179
+ // Should be greater than linear at 0.5
180
+ expect(result[0]).toBeGreaterThan(5);
181
+ });
182
+ });
183
+ describe('VectorExponentialEaseIn', () => {
184
+ it('should start very slowly', () => {
185
+ const result = VectorExponentialEaseIn(vec2a, vec2b, 0.1);
186
+ // Should be very close to start
187
+ expect(result[0]).toBeLessThan(0.1);
188
+ });
189
+ });
190
+ describe('VectorExponentialEaseOut', () => {
191
+ it('should approach end very slowly', () => {
192
+ const result = VectorExponentialEaseOut(vec2a, vec2b, 0.9);
193
+ // Should be very close to end
194
+ expect(result[0]).toBeGreaterThan(9.9);
195
+ });
196
+ });
197
+ describe('VectorElasticEaseOut', () => {
198
+ it('should create elastic overshoot effect', () => {
199
+ const result = VectorElasticEaseOut(vec2a, vec2b, 0.7);
200
+ // Elastic should overshoot beyond target at some point
201
+ // This is hard to test precisely, so we just verify it doesn't crash
202
+ expect(Array.isArray(result)).toBe(true);
203
+ expect(result.length).toBe(2);
204
+ });
205
+ });
206
+ describe('VectorBackEaseOut', () => {
207
+ it('should create back overshoot effect', () => {
208
+ const result = VectorBackEaseOut(vec2a, vec2b, 0.8);
209
+ expect(Array.isArray(result)).toBe(true);
210
+ expect(result.length).toBe(2);
211
+ });
212
+ });
213
+ describe('VectorBounceEaseOut', () => {
214
+ it('should create bouncing effect', () => {
215
+ const result = VectorBounceEaseOut(vec2a, vec2b, 0.8);
216
+ expect(Array.isArray(result)).toBe(true);
217
+ expect(result.length).toBe(2);
218
+ });
219
+ });
220
+ describe('VectorCircularEaseIn', () => {
221
+ it('should provide circular ease in curve', () => {
222
+ const result = VectorCircularEaseIn(vec2a, vec2b, 0.5);
223
+ // Should start slowly
224
+ expect(result[0]).toBeLessThan(5);
225
+ });
226
+ });
227
+ describe('VectorCircularEaseOut', () => {
228
+ it('should provide circular ease out curve', () => {
229
+ const result = VectorCircularEaseOut(vec2a, vec2b, 0.5);
230
+ // Should end slowly
231
+ expect(result[0]).toBeGreaterThan(5);
232
+ });
233
+ });
234
+ describe('VectorStepInterpolation', () => {
235
+ it('should step at default threshold (0.5)', () => {
236
+ const result1 = VectorStepInterpolation(vec2a, vec2b, 0.4);
237
+ const result2 = VectorStepInterpolation(vec2a, vec2b, 0.6);
238
+ expect(result1).toEqual([0, 0]);
239
+ expect(result2).toEqual([10, 20]);
240
+ });
241
+ it('should step at custom threshold', () => {
242
+ const result1 = VectorStepInterpolation(vec2a, vec2b, 0.3, 0.7);
243
+ const result2 = VectorStepInterpolation(vec2a, vec2b, 0.8, 0.7);
244
+ expect(result1).toEqual([0, 0]);
245
+ expect(result2).toEqual([10, 20]);
246
+ });
247
+ it('should throw for invalid threshold', () => {
248
+ expect(() => VectorStepInterpolation(vec2a, vec2b, 0.5, NaN)).toThrow();
249
+ });
250
+ });
251
+ describe('VectorCatmullRomInterpolation', () => {
252
+ it('should interpolate through control points', () => {
253
+ const p0 = [-5, -10];
254
+ const p1 = [0, 0];
255
+ const p2 = [10, 20];
256
+ const p3 = [15, 30];
257
+ // At t=0, should return p1
258
+ const result0 = VectorCatmullRomInterpolation(p0, p1, p2, p3, 0);
259
+ expectVectorToBeCloseTo(result0, p1);
260
+ // At t=1, should return p2
261
+ const result1 = VectorCatmullRomInterpolation(p0, p1, p2, p3, 1);
262
+ expectVectorToBeCloseTo(result1, p2);
263
+ });
264
+ it('should throw for mismatched dimensions', () => {
265
+ expect(() => VectorCatmullRomInterpolation([1, 2], [1, 2, 3], [1, 2], [1, 2], 0.5)).toThrow(VectorError);
266
+ });
267
+ it('should throw for invalid values', () => {
268
+ expect(() => VectorCatmullRomInterpolation([1, NaN], [1, 2], [1, 2], [1, 2], 0.5)).toThrow();
269
+ });
270
+ });
271
+ describe('VectorHermiteInterpolation', () => {
272
+ it('should interpolate with tangent control', () => {
273
+ const p0 = [0, 0];
274
+ const p1 = [10, 20];
275
+ const t0 = [1, 1]; // Start tangent
276
+ const t1 = [1, 1]; // End tangent
277
+ // At t=0, should return p0
278
+ const result0 = VectorHermiteInterpolation(p0, p1, t0, t1, 0);
279
+ expectVectorToBeCloseTo(result0, p0);
280
+ // At t=1, should return p1
281
+ const result1 = VectorHermiteInterpolation(p0, p1, t0, t1, 1);
282
+ expectVectorToBeCloseTo(result1, p1);
283
+ });
284
+ it('should throw for mismatched dimensions', () => {
285
+ expect(() => VectorHermiteInterpolation([1, 2], [1, 2, 3], [1, 2], [1, 2], 0.5)).toThrow(VectorError);
286
+ });
287
+ });
288
+ describe('VectorSphericalLinearInterpolation', () => {
289
+ it('should perform SLERP on 2D vectors', () => {
290
+ const a = [1, 0];
291
+ const b = [0, 1];
292
+ const result = VectorSphericalLinearInterpolation(a, b, 0.5);
293
+ // Should be normalized and at 45 degrees
294
+ expectVectorToBeCloseTo(result, [0.7071, 0.7071], 3);
295
+ });
296
+ it('should perform SLERP on 3D vectors', () => {
297
+ const a = [1, 0, 0];
298
+ const b = [0, 1, 0];
299
+ const result = VectorSphericalLinearInterpolation(a, b, 0.5);
300
+ expectVectorToBeCloseTo(result, [0.7071, 0.7071, 0], 3);
301
+ });
302
+ it('should handle parallel vectors by falling back to LERP', () => {
303
+ const a = [1, 1];
304
+ const b = [2, 2];
305
+ const result = VectorSphericalLinearInterpolation(a, b, 0.5);
306
+ const lerpResult = VectorLERP(a, b, 0.5);
307
+ expectVectorToBeCloseTo(result, lerpResult);
308
+ });
309
+ it('should handle anti-parallel vectors', () => {
310
+ const a = [1, 0];
311
+ const b = [-1, 0];
312
+ // Should handle this case without error
313
+ const result = VectorSphericalLinearInterpolation(a, b, 0.5);
314
+ expect(Array.isArray(result)).toBe(true);
315
+ expect(result.length).toBe(2);
316
+ });
317
+ it('should extrapolate for t < 0 and t > 1', () => {
318
+ const a = [1, 0];
319
+ const b = [0, 1];
320
+ const resultBelow = VectorSphericalLinearInterpolation(a, b, -0.5);
321
+ const resultAbove = VectorSphericalLinearInterpolation(a, b, 1.5);
322
+ // Should not clamp, so results should differ from t=0 and t=1
323
+ expect(resultBelow[0]).not.toBeCloseTo(a[0], 10);
324
+ expect(resultAbove[1]).not.toBeCloseTo(b[1], 10);
325
+ });
326
+ it('should throw for vectors smaller than 2D', () => {
327
+ expect(() => VectorSphericalLinearInterpolation([1], [2], 0.5)).toThrow(VectorError);
328
+ });
329
+ it('should throw for mismatched dimensions', () => {
330
+ expect(() => VectorSphericalLinearInterpolation([1, 2], [1, 2, 3], 0.5)).toThrow(VectorError);
331
+ });
332
+ });
333
+ // General tests that apply to all interpolation functions
334
+ describe('General Interpolation Properties', () => {
335
+ const interpolationFunctions = [
336
+ { name: 'LERP', fn: VectorLERP },
337
+ { name: 'SmoothStep', fn: VectorSmoothStep },
338
+ { name: 'SmootherStep', fn: VectorSmootherStep },
339
+ { name: 'QuadraticEaseIn', fn: VectorQuadraticEaseIn },
340
+ { name: 'QuadraticEaseOut', fn: VectorQuadraticEaseOut },
341
+ { name: 'CubicEaseIn', fn: VectorCubicEaseIn },
342
+ { name: 'CubicEaseOut', fn: VectorCubicEaseOut },
343
+ { name: 'CosineInterpolation', fn: VectorCosineInterpolation },
344
+ { name: 'SineEaseIn', fn: VectorSineEaseIn },
345
+ { name: 'SineEaseOut', fn: VectorSineEaseOut },
346
+ { name: 'CircularEaseIn', fn: VectorCircularEaseIn },
347
+ { name: 'CircularEaseOut', fn: VectorCircularEaseOut },
348
+ ];
349
+ interpolationFunctions.forEach(({ name, fn }) => {
350
+ describe(`${name}`, () => {
351
+ it('should preserve vector dimensions', () => {
352
+ const result2D = fn(vec2a, vec2b, 0.5);
353
+ const result3D = fn(vec3a, vec3b, 0.5);
354
+ const result4D = fn(vec4a, vec4b, 0.5);
355
+ expect(result2D.length).toBe(2);
356
+ expect(result3D.length).toBe(3);
357
+ expect(result4D.length).toBe(4);
358
+ });
359
+ it('should return start vector at t=0', () => {
360
+ expectVectorToBeCloseTo(fn(vec2a, vec2b, 0), vec2a, 10);
361
+ expectVectorToBeCloseTo(fn(vec3a, vec3b, 0), vec3a, 10);
362
+ });
363
+ it('should return end vector at t=1', () => {
364
+ expectVectorToBeCloseTo(fn(vec2a, vec2b, 1), vec2b, 10);
365
+ expectVectorToBeCloseTo(fn(vec3a, vec3b, 1), vec3b, 10);
366
+ });
367
+ it('should throw for empty vectors', () => {
368
+ expect(() => fn([], [], 0.5)).toThrow(VectorError);
369
+ });
370
+ it('should throw for vectors with Infinity', () => {
371
+ expect(() => fn([1, Infinity], [1, 2], 0.5)).toThrow(VectorError);
372
+ expect(() => fn([1, 2], [1, -Infinity], 0.5)).toThrow(VectorError);
373
+ });
374
+ });
375
+ });
376
+ });
377
+ });
378
+ //# sourceMappingURL=interpolation.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interpolation.spec.js","sourceRoot":"","sources":["../../src/vectors/interpolation.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,191 @@
1
+ /**
2
+ * Predefined vector factory functions for common mathematical operations.
3
+ * Provides convenient constructors for standard vectors used in graphics, physics, and mathematics.
4
+ */
5
+ import { TVector, TVector2, TVector3, TVector4 } from './types.js';
6
+ type TVectorSize3 = 3;
7
+ type TVectorSize4 = 4;
8
+ /**
9
+ * Creates a zero vector of the specified dimension.
10
+ * Zero vectors are commonly used as initial values, identity elements in addition,
11
+ * and as the origin point in coordinate systems.
12
+ *
13
+ * @param size - The dimension of the vector (1, 2, 3, or 4)
14
+ * @returns A vector with all components set to 0
15
+ *
16
+ * @example
17
+ * const origin2D = VectorZero(2); // [0, 0]
18
+ * const origin3D = VectorZero(3); // [0, 0, 0]
19
+ * const origin4D = VectorZero(4); // [0, 0, 0, 0]
20
+ */
21
+ export declare function VectorZero(size: 1): TVector;
22
+ export declare function VectorZero(size: 2): TVector2;
23
+ export declare function VectorZero(size: TVectorSize3): TVector3;
24
+ export declare function VectorZero(size: TVectorSize4): TVector4;
25
+ /**
26
+ * Creates a vector with all components set to 1.
27
+ * One vectors are useful for scaling operations, default values,
28
+ * and mathematical operations where unit values are needed.
29
+ *
30
+ * @param size - The dimension of the vector (1, 2, 3, or 4)
31
+ * @returns A vector with all components set to 1
32
+ *
33
+ * @example
34
+ * const ones2D = VectorOne(2); // [1, 1]
35
+ * const ones3D = VectorOne(3); // [1, 1, 1]
36
+ * const ones4D = VectorOne(4); // [1, 1, 1, 1]
37
+ */
38
+ export declare function VectorOne(size: 1): TVector;
39
+ export declare function VectorOne(size: 2): TVector2;
40
+ export declare function VectorOne(size: TVectorSize3): TVector3;
41
+ export declare function VectorOne(size: TVectorSize4): TVector4;
42
+ /**
43
+ * Creates a 2D unit vector pointing upward (positive Y direction).
44
+ * Standard in screen coordinates where Y increases downward, or
45
+ * mathematical coordinates where Y increases upward.
46
+ *
47
+ * @returns [0, 1] - Unit vector in positive Y direction
48
+ *
49
+ * @example
50
+ * const upDirection = Vector2_Up(); // Character movement upward
51
+ * const velocity = Vector2_Up().map(c => c * speed); // Moving up at given speed
52
+ */
53
+ export declare function Vector2Up(): TVector2;
54
+ /**
55
+ * Creates a 3D unit vector pointing upward (positive Y direction).
56
+ * Standard in 3D graphics and physics where Y is typically the vertical axis.
57
+ *
58
+ * @returns [0, 1, 0] - Unit vector in positive Y direction
59
+ *
60
+ * @example
61
+ * const worldUp = Vector3_Up(); // World space up direction
62
+ * const jumpForce = Vector3_Up().map(c => c * jumpStrength);
63
+ */
64
+ export declare function Vector3Up(): TVector3;
65
+ /**
66
+ * Creates a 4D unit vector pointing upward (positive Y direction).
67
+ * Useful in homogeneous coordinates and 4D transformations.
68
+ *
69
+ * @returns [0, 1, 0, 0] - Unit vector in positive Y direction
70
+ */
71
+ export declare function Vector4Up(): TVector4;
72
+ /**
73
+ * Creates a 2D unit vector pointing downward (negative Y direction).
74
+ * Commonly used for gravity, falling objects, or downward movement.
75
+ *
76
+ * @returns [0, -1] - Unit vector in negative Y direction
77
+ *
78
+ * @example
79
+ * const gravity = Vector2_Down().map(c => c * 9.81); // Gravity force
80
+ * const dropDirection = Vector2_Down(); // Object falling down
81
+ */
82
+ export declare function Vector2Down(): TVector2;
83
+ /**
84
+ * Creates a 3D unit vector pointing downward (negative Y direction).
85
+ * Standard for gravity simulation and downward movement in 3D space.
86
+ *
87
+ * @returns [0, -1, 0] - Unit vector in negative Y direction
88
+ *
89
+ * @example
90
+ * const gravityForce = Vector3Down().map(c => c * 9.81);
91
+ * const downwardRay = Vector3Down(); // Raycast downward
92
+ */
93
+ export declare function Vector3Down(): TVector3;
94
+ /**
95
+ * Creates a 4D unit vector pointing downward (negative Y direction).
96
+ *
97
+ * @returns [0, -1, 0, 0] - Unit vector in negative Y direction
98
+ */
99
+ export declare function Vector4Down(): TVector4;
100
+ /**
101
+ * Creates a 2D unit vector pointing left (negative X direction).
102
+ * Standard for leftward movement in 2D coordinate systems.
103
+ *
104
+ * @returns [-1, 0] - Unit vector in negative X direction
105
+ *
106
+ * @example
107
+ * const leftMovement = Vector2Left().map(c => c * speed);
108
+ * const leftDirection = Vector2Left(); // Character facing left
109
+ */
110
+ export declare function Vector2Left(): TVector2;
111
+ /**
112
+ * Creates a 3D unit vector pointing left (negative X direction).
113
+ * Standard for leftward movement in 3D coordinate systems.
114
+ *
115
+ * @returns [-1, 0, 0] - Unit vector in negative X direction
116
+ *
117
+ * @example
118
+ * const strafeLeft = Vector3Left().map(c => c * strafeSpeed);
119
+ */
120
+ export declare function Vector3Left(): TVector3;
121
+ /**
122
+ * Creates a 4D unit vector pointing left (negative X direction).
123
+ *
124
+ * @returns [-1, 0, 0, 0] - Unit vector in negative X direction
125
+ */
126
+ export declare function Vector4Left(): TVector4;
127
+ /**
128
+ * Creates a 2D unit vector pointing right (positive X direction).
129
+ * Standard for rightward movement in 2D coordinate systems.
130
+ *
131
+ * @returns [1, 0] - Unit vector in positive X direction
132
+ *
133
+ * @example
134
+ * const rightMovement = Vector2Right().map(c => c * speed);
135
+ * const rightDirection = Vector2Right(); // Character facing right
136
+ */
137
+ export declare function Vector2Right(): TVector2;
138
+ /**
139
+ * Creates a 3D unit vector pointing right (positive X direction).
140
+ * Standard for rightward movement in 3D coordinate systems.
141
+ *
142
+ * @returns [1, 0, 0] - Unit vector in positive X direction
143
+ *
144
+ * @example
145
+ * const strafeRight = Vector3Right().map(c => c * strafeSpeed);
146
+ */
147
+ export declare function Vector3Right(): TVector3;
148
+ /**
149
+ * Creates a 4D unit vector pointing right (positive X direction).
150
+ *
151
+ * @returns [1, 0, 0, 0] - Unit vector in positive X direction
152
+ */
153
+ export declare function Vector4Right(): TVector4;
154
+ /**
155
+ * Creates a 3D unit vector pointing forward (positive Z direction).
156
+ * Standard in right-handed coordinate systems where Z points toward the viewer.
157
+ * Commonly used for forward movement and camera directions.
158
+ *
159
+ * @returns [0, 0, 1] - Unit vector in positive Z direction
160
+ *
161
+ * @example
162
+ * const forwardMovement = Vector3Forward().map(c => c * speed);
163
+ * const cameraForward = Vector3Forward(); // Camera looking direction
164
+ */
165
+ export declare function Vector3Forward(): TVector3;
166
+ /**
167
+ * Creates a 4D unit vector pointing forward (positive Z direction).
168
+ *
169
+ * @returns [0, 0, 1, 0] - Unit vector in positive Z direction
170
+ */
171
+ export declare function Vector4Forward(): TVector4;
172
+ /**
173
+ * Creates a 3D unit vector pointing backward (negative Z direction).
174
+ * Standard in right-handed coordinate systems where negative Z points away from the viewer.
175
+ * Commonly used for backward movement and opposite camera directions.
176
+ *
177
+ * @returns [0, 0, -1] - Unit vector in negative Z direction
178
+ *
179
+ * @example
180
+ * const backwardMovement = Vector3Backward().map(c => c * speed);
181
+ * const reverseDirection = Vector3Backward(); // Moving away from target
182
+ */
183
+ export declare function Vector3Backward(): TVector3;
184
+ /**
185
+ * Creates a 4D unit vector pointing backward (negative Z direction).
186
+ *
187
+ * @returns [0, 0, -1, 0] - Unit vector in negative Z direction
188
+ */
189
+ export declare function Vector4Backward(): TVector4;
190
+ export {};
191
+ //# sourceMappingURL=predefined.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"predefined.d.ts","sourceRoot":"","sources":["../../src/vectors/predefined.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEnE,KAAK,YAAY,GAAG,CAAC,CAAC;AACtB,KAAK,YAAY,GAAG,CAAC,CAAC;AAEtB;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC;AAC7C,wBAAgB,UAAU,CAAC,IAAI,EAAE,CAAC,GAAG,QAAQ,CAAC;AAC9C,wBAAgB,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,QAAQ,CAAC;AACzD,wBAAgB,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,QAAQ,CAAC;AAKzD;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC;AAC5C,wBAAgB,SAAS,CAAC,IAAI,EAAE,CAAC,GAAG,QAAQ,CAAC;AAC7C,wBAAgB,SAAS,CAAC,IAAI,EAAE,YAAY,GAAG,QAAQ,CAAC;AACxD,wBAAgB,SAAS,CAAC,IAAI,EAAE,YAAY,GAAG,QAAQ,CAAC;AAKxD;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,IAAI,QAAQ,CAEpC;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,IAAI,QAAQ,CAEpC;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,IAAI,QAAQ,CAEpC;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAEtC;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAEtC;AAED;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAEtC;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAEtC;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAEtC;AAED;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAEtC;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,IAAI,QAAQ,CAEvC;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,IAAI,QAAQ,CAEvC;AAED;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,QAAQ,CAEvC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,IAAI,QAAQ,CAEzC;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,QAAQ,CAEzC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,IAAI,QAAQ,CAE1C;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,QAAQ,CAE1C"}