@math.gl/core 3.6.3 → 4.0.0-alpha.2

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 (210) hide show
  1. package/dist/classes/base/math-array.d.ts +5 -4
  2. package/dist/classes/base/math-array.d.ts.map +1 -1
  3. package/dist/{esm/classes → classes}/base/math-array.js +8 -3
  4. package/dist/classes/base/math-array.js.map +1 -0
  5. package/dist/classes/base/matrix.d.ts +2 -2
  6. package/dist/classes/base/matrix.d.ts.map +1 -1
  7. package/dist/{esm/classes → classes}/base/matrix.js +4 -4
  8. package/dist/classes/base/matrix.js.map +1 -0
  9. package/dist/classes/base/vector.d.ts +2 -2
  10. package/dist/classes/base/vector.d.ts.map +1 -1
  11. package/dist/{esm/classes → classes}/base/vector.js +4 -4
  12. package/dist/classes/base/vector.js.map +1 -0
  13. package/dist/classes/euler.d.ts +4 -4
  14. package/dist/classes/euler.d.ts.map +1 -1
  15. package/dist/{esm/classes → classes}/euler.js +6 -6
  16. package/dist/classes/euler.js.map +1 -0
  17. package/dist/classes/matrix3.d.ts +5 -2
  18. package/dist/classes/matrix3.d.ts.map +1 -1
  19. package/dist/{esm/classes → classes}/matrix3.js +20 -20
  20. package/dist/classes/matrix3.js.map +1 -0
  21. package/dist/classes/matrix4.d.ts +2 -2
  22. package/dist/classes/matrix4.d.ts.map +1 -1
  23. package/dist/{esm/classes → classes}/matrix4.js +27 -27
  24. package/dist/classes/matrix4.js.map +1 -0
  25. package/dist/classes/pose.d.ts +4 -4
  26. package/dist/classes/pose.d.ts.map +1 -1
  27. package/dist/{esm/classes → classes}/pose.js +4 -4
  28. package/dist/classes/pose.js.map +1 -0
  29. package/dist/classes/quaternion.d.ts +2 -2
  30. package/dist/classes/quaternion.d.ts.map +1 -1
  31. package/dist/{esm/classes → classes}/quaternion.js +26 -26
  32. package/dist/classes/quaternion.js.map +1 -0
  33. package/dist/classes/spherical-coordinates.d.ts +2 -2
  34. package/dist/classes/spherical-coordinates.d.ts.map +1 -1
  35. package/dist/{esm/classes → classes}/spherical-coordinates.js +5 -5
  36. package/dist/classes/spherical-coordinates.js.map +1 -0
  37. package/dist/classes/vector2.d.ts +2 -2
  38. package/dist/classes/vector2.d.ts.map +1 -1
  39. package/dist/{esm/classes → classes}/vector2.js +10 -10
  40. package/dist/classes/vector2.js.map +1 -0
  41. package/dist/classes/vector3.d.ts +2 -2
  42. package/dist/classes/vector3.d.ts.map +1 -1
  43. package/dist/{esm/classes → classes}/vector3.js +14 -14
  44. package/dist/classes/vector3.js.map +1 -0
  45. package/dist/classes/vector4.d.ts +3 -3
  46. package/dist/classes/vector4.d.ts.map +1 -1
  47. package/dist/{esm/classes → classes}/vector4.js +8 -8
  48. package/dist/classes/vector4.js.map +1 -0
  49. package/dist/gl-matrix/common.d.ts +38 -0
  50. package/dist/gl-matrix/common.d.ts.map +1 -0
  51. package/dist/gl-matrix/common.js +19 -0
  52. package/dist/gl-matrix/common.js.map +1 -0
  53. package/dist/gl-matrix/mat3.d.ts +295 -0
  54. package/dist/gl-matrix/mat3.d.ts.map +1 -0
  55. package/dist/gl-matrix/mat3.js +489 -0
  56. package/dist/gl-matrix/mat3.js.map +1 -0
  57. package/dist/gl-matrix/mat4.d.ts +577 -0
  58. package/dist/gl-matrix/mat4.d.ts.map +1 -0
  59. package/dist/gl-matrix/mat4.js +1455 -0
  60. package/dist/gl-matrix/mat4.js.map +1 -0
  61. package/dist/gl-matrix/quat.d.ts +357 -0
  62. package/dist/gl-matrix/quat.d.ts.map +1 -0
  63. package/dist/gl-matrix/quat.js +315 -0
  64. package/dist/gl-matrix/quat.js.map +1 -0
  65. package/dist/gl-matrix/vec2.d.ts +373 -0
  66. package/dist/gl-matrix/vec2.d.ts.map +1 -0
  67. package/dist/gl-matrix/vec2.js +257 -0
  68. package/dist/gl-matrix/vec2.js.map +1 -0
  69. package/dist/gl-matrix/vec3.d.ts +416 -0
  70. package/dist/gl-matrix/vec3.d.ts.map +1 -0
  71. package/dist/gl-matrix/vec3.js +384 -0
  72. package/dist/gl-matrix/vec3.js.map +1 -0
  73. package/dist/gl-matrix/vec4.d.ts +340 -0
  74. package/dist/gl-matrix/vec4.d.ts.map +1 -0
  75. package/dist/gl-matrix/vec4.js +334 -0
  76. package/dist/gl-matrix/vec4.js.map +1 -0
  77. package/dist/gl-matrix/wip/index.d.ts +5 -0
  78. package/dist/gl-matrix/wip/index.d.ts.map +1 -0
  79. package/dist/gl-matrix/wip/index.js +12 -0
  80. package/dist/gl-matrix/wip/index.js.map +1 -0
  81. package/dist/gl-matrix/wip/mat2.d.ts +229 -0
  82. package/dist/gl-matrix/wip/mat2.d.ts.map +1 -0
  83. package/dist/gl-matrix/wip/mat2.js +208 -0
  84. package/dist/gl-matrix/wip/mat2.js.map +1 -0
  85. package/dist/gl-matrix/wip/mat2d.d.ts +244 -0
  86. package/dist/gl-matrix/wip/mat2d.d.ts.map +1 -0
  87. package/dist/gl-matrix/wip/mat2d.js +251 -0
  88. package/dist/gl-matrix/wip/mat2d.js.map +1 -0
  89. package/dist/gl-matrix/wip/quat2.d.ts +352 -0
  90. package/dist/gl-matrix/wip/quat2.d.ts.map +1 -0
  91. package/dist/gl-matrix/wip/quat2.js +482 -0
  92. package/dist/gl-matrix/wip/quat2.js.map +1 -0
  93. package/dist/gl-matrix/wip/types.d.js +2 -0
  94. package/dist/{esm/lib/gl-matrix.d.js.map → gl-matrix/wip/types.d.js.map} +1 -1
  95. package/dist/index.cjs +3788 -0
  96. package/dist/index.d.ts +15 -14
  97. package/dist/index.d.ts.map +1 -1
  98. package/dist/index.js +17 -0
  99. package/dist/index.js.map +1 -0
  100. package/dist/lib/assert.d.ts +1 -1
  101. package/dist/lib/assert.d.ts.map +1 -1
  102. package/dist/lib/assert.js +6 -0
  103. package/dist/lib/assert.js.map +1 -0
  104. package/dist/lib/common.d.ts +10 -5
  105. package/dist/lib/common.d.ts.map +1 -1
  106. package/dist/{esm/lib → lib}/common.js +11 -9
  107. package/dist/lib/common.js.map +1 -0
  108. package/dist/lib/gl-matrix-extras.js.map +1 -0
  109. package/dist/lib/math-utils.d.ts +24 -27
  110. package/dist/lib/math-utils.d.ts.map +1 -1
  111. package/dist/lib/math-utils.js +25 -0
  112. package/dist/lib/math-utils.js.map +1 -0
  113. package/dist/lib/validators.d.ts +1 -1
  114. package/dist/lib/validators.d.ts.map +1 -1
  115. package/dist/{esm/lib → lib}/validators.js +2 -2
  116. package/dist/lib/validators.js.map +1 -0
  117. package/package.json +6 -6
  118. package/src/classes/base/math-array.ts +16 -8
  119. package/src/classes/base/matrix.ts +7 -4
  120. package/src/classes/base/vector.ts +4 -4
  121. package/src/classes/euler.ts +9 -8
  122. package/src/classes/matrix3.ts +37 -24
  123. package/src/classes/matrix4.ts +48 -29
  124. package/src/classes/pose.ts +4 -4
  125. package/src/classes/quaternion.ts +54 -32
  126. package/src/classes/spherical-coordinates.ts +5 -4
  127. package/src/classes/vector2.ts +13 -9
  128. package/src/classes/vector3.ts +26 -12
  129. package/src/classes/vector4.ts +14 -10
  130. package/src/gl-matrix/common.js +58 -0
  131. package/src/gl-matrix/mat3.js +842 -0
  132. package/src/gl-matrix/mat4.js +2169 -0
  133. package/src/gl-matrix/quat.ts +789 -0
  134. package/src/gl-matrix/vec2.js +629 -0
  135. package/src/gl-matrix/vec3.js +827 -0
  136. package/src/gl-matrix/vec4.js +675 -0
  137. package/src/gl-matrix/wip/index.js +15 -0
  138. package/src/gl-matrix/wip/mat2.js +442 -0
  139. package/src/gl-matrix/wip/mat2d.js +505 -0
  140. package/src/gl-matrix/wip/quat2.ts +886 -0
  141. package/src/gl-matrix/wip/types.d.ts +93 -0
  142. package/src/index.ts +16 -14
  143. package/src/lib/assert.ts +1 -1
  144. package/src/lib/common.ts +31 -19
  145. package/src/lib/math-utils.ts +24 -26
  146. package/src/lib/validators.ts +3 -3
  147. package/dist/es5/classes/base/math-array.js +0 -348
  148. package/dist/es5/classes/base/math-array.js.map +0 -1
  149. package/dist/es5/classes/base/matrix.js +0 -108
  150. package/dist/es5/classes/base/matrix.js.map +0 -1
  151. package/dist/es5/classes/base/vector.js +0 -210
  152. package/dist/es5/classes/base/vector.js.map +0 -1
  153. package/dist/es5/classes/euler.js +0 -654
  154. package/dist/es5/classes/euler.js.map +0 -1
  155. package/dist/es5/classes/matrix3.js +0 -284
  156. package/dist/es5/classes/matrix3.js.map +0 -1
  157. package/dist/es5/classes/matrix4.js +0 -574
  158. package/dist/es5/classes/matrix4.js.map +0 -1
  159. package/dist/es5/classes/pose.js +0 -159
  160. package/dist/es5/classes/pose.js.map +0 -1
  161. package/dist/es5/classes/quaternion.js +0 -323
  162. package/dist/es5/classes/quaternion.js.map +0 -1
  163. package/dist/es5/classes/spherical-coordinates.js +0 -208
  164. package/dist/es5/classes/spherical-coordinates.js.map +0 -1
  165. package/dist/es5/classes/vector2.js +0 -156
  166. package/dist/es5/classes/vector2.js.map +0 -1
  167. package/dist/es5/classes/vector3.js +0 -213
  168. package/dist/es5/classes/vector3.js.map +0 -1
  169. package/dist/es5/classes/vector4.js +0 -185
  170. package/dist/es5/classes/vector4.js.map +0 -1
  171. package/dist/es5/docs/README.md +0 -0
  172. package/dist/es5/index.js +0 -236
  173. package/dist/es5/index.js.map +0 -1
  174. package/dist/es5/lib/assert.js +0 -13
  175. package/dist/es5/lib/assert.js.map +0 -1
  176. package/dist/es5/lib/common.js +0 -255
  177. package/dist/es5/lib/common.js.map +0 -1
  178. package/dist/es5/lib/gl-matrix-extras.js +0 -61
  179. package/dist/es5/lib/gl-matrix-extras.js.map +0 -1
  180. package/dist/es5/lib/gl-matrix.d.js +0 -2
  181. package/dist/es5/lib/math-utils.js +0 -34
  182. package/dist/es5/lib/math-utils.js.map +0 -1
  183. package/dist/es5/lib/validators.js +0 -53
  184. package/dist/es5/lib/validators.js.map +0 -1
  185. package/dist/esm/classes/base/math-array.js.map +0 -1
  186. package/dist/esm/classes/base/matrix.js.map +0 -1
  187. package/dist/esm/classes/base/vector.js.map +0 -1
  188. package/dist/esm/classes/euler.js.map +0 -1
  189. package/dist/esm/classes/matrix3.js.map +0 -1
  190. package/dist/esm/classes/matrix4.js.map +0 -1
  191. package/dist/esm/classes/pose.js.map +0 -1
  192. package/dist/esm/classes/quaternion.js.map +0 -1
  193. package/dist/esm/classes/spherical-coordinates.js.map +0 -1
  194. package/dist/esm/classes/vector2.js.map +0 -1
  195. package/dist/esm/classes/vector3.js.map +0 -1
  196. package/dist/esm/classes/vector4.js.map +0 -1
  197. package/dist/esm/docs/README.md +0 -0
  198. package/dist/esm/index.js +0 -16
  199. package/dist/esm/index.js.map +0 -1
  200. package/dist/esm/lib/assert.js +0 -6
  201. package/dist/esm/lib/assert.js.map +0 -1
  202. package/dist/esm/lib/common.js.map +0 -1
  203. package/dist/esm/lib/gl-matrix-extras.js.map +0 -1
  204. package/dist/esm/lib/math-utils.js +0 -27
  205. package/dist/esm/lib/math-utils.js.map +0 -1
  206. package/dist/esm/lib/validators.js.map +0 -1
  207. package/src/docs/README.md +0 -0
  208. /package/dist/{esm/lib → lib}/gl-matrix-extras.js +0 -0
  209. /package/dist/{esm/lib → lib}/gl-matrix.d.js +0 -0
  210. /package/dist/{es5/lib → lib}/gl-matrix.d.js.map +0 -0
@@ -0,0 +1,629 @@
1
+ // @eslint-disable
2
+ // @ts-nocheck
3
+
4
+ import * as glMatrix from './common.js';
5
+
6
+ /**
7
+ * 2 Dimensional Vector
8
+ * @module vec2
9
+ */
10
+
11
+ /**
12
+ * Creates a new, empty vec2
13
+ *
14
+ * @returns {vec2} a new 2D vector
15
+ */
16
+ export function create() {
17
+ const out = new glMatrix.ARRAY_TYPE(2);
18
+ if (glMatrix.ARRAY_TYPE != Float32Array) {
19
+ out[0] = 0;
20
+ out[1] = 0;
21
+ }
22
+ return out;
23
+ }
24
+
25
+ /**
26
+ * Creates a new vec2 initialized with values from an existing vector
27
+ *
28
+ * @param {ReadonlyVec2} a vector to clone
29
+ * @returns {vec2} a new 2D vector
30
+ */
31
+ export function clone(a) {
32
+ const out = new glMatrix.ARRAY_TYPE(2);
33
+ out[0] = a[0];
34
+ out[1] = a[1];
35
+ return out;
36
+ }
37
+
38
+ /**
39
+ * Creates a new vec2 initialized with the given values
40
+ *
41
+ * @param {Number} x X component
42
+ * @param {Number} y Y component
43
+ * @returns {vec2} a new 2D vector
44
+ */
45
+ export function fromValues(x, y) {
46
+ const out = new glMatrix.ARRAY_TYPE(2);
47
+ out[0] = x;
48
+ out[1] = y;
49
+ return out;
50
+ }
51
+
52
+ /**
53
+ * Copy the values from one vec2 to another
54
+ *
55
+ * @param {vec2} out the receiving vector
56
+ * @param {ReadonlyVec2} a the source vector
57
+ * @returns {vec2} out
58
+ */
59
+ export function copy(out, a) {
60
+ out[0] = a[0];
61
+ out[1] = a[1];
62
+ return out;
63
+ }
64
+
65
+ /**
66
+ * Set the components of a vec2 to the given values
67
+ *
68
+ * @param {vec2} out the receiving vector
69
+ * @param {Number} x X component
70
+ * @param {Number} y Y component
71
+ * @returns {vec2} out
72
+ */
73
+ export function set(out, x, y) {
74
+ out[0] = x;
75
+ out[1] = y;
76
+ return out;
77
+ }
78
+
79
+ /**
80
+ * Adds two vec2's
81
+ *
82
+ * @param {vec2} out the receiving vector
83
+ * @param {ReadonlyVec2} a the first operand
84
+ * @param {ReadonlyVec2} b the second operand
85
+ * @returns {vec2} out
86
+ */
87
+ export function add(out, a, b) {
88
+ out[0] = a[0] + b[0];
89
+ out[1] = a[1] + b[1];
90
+ return out;
91
+ }
92
+
93
+ /**
94
+ * Subtracts vector b from vector a
95
+ *
96
+ * @param {vec2} out the receiving vector
97
+ * @param {ReadonlyVec2} a the first operand
98
+ * @param {ReadonlyVec2} b the second operand
99
+ * @returns {vec2} out
100
+ */
101
+ export function subtract(out, a, b) {
102
+ out[0] = a[0] - b[0];
103
+ out[1] = a[1] - b[1];
104
+ return out;
105
+ }
106
+
107
+ /**
108
+ * Multiplies two vec2's
109
+ *
110
+ * @param {vec2} out the receiving vector
111
+ * @param {ReadonlyVec2} a the first operand
112
+ * @param {ReadonlyVec2} b the second operand
113
+ * @returns {vec2} out
114
+ */
115
+ export function multiply(out, a, b) {
116
+ out[0] = a[0] * b[0];
117
+ out[1] = a[1] * b[1];
118
+ return out;
119
+ }
120
+
121
+ /**
122
+ * Divides two vec2's
123
+ *
124
+ * @param {vec2} out the receiving vector
125
+ * @param {ReadonlyVec2} a the first operand
126
+ * @param {ReadonlyVec2} b the second operand
127
+ * @returns {vec2} out
128
+ */
129
+ export function divide(out, a, b) {
130
+ out[0] = a[0] / b[0];
131
+ out[1] = a[1] / b[1];
132
+ return out;
133
+ }
134
+
135
+ /**
136
+ * Math.ceil the components of a vec2
137
+ *
138
+ * @param {vec2} out the receiving vector
139
+ * @param {ReadonlyVec2} a vector to ceil
140
+ * @returns {vec2} out
141
+ */
142
+ export function ceil(out, a) {
143
+ out[0] = Math.ceil(a[0]);
144
+ out[1] = Math.ceil(a[1]);
145
+ return out;
146
+ }
147
+
148
+ /**
149
+ * Math.floor the components of a vec2
150
+ *
151
+ * @param {vec2} out the receiving vector
152
+ * @param {ReadonlyVec2} a vector to floor
153
+ * @returns {vec2} out
154
+ */
155
+ export function floor(out, a) {
156
+ out[0] = Math.floor(a[0]);
157
+ out[1] = Math.floor(a[1]);
158
+ return out;
159
+ }
160
+
161
+ /**
162
+ * Returns the minimum of two vec2's
163
+ *
164
+ * @param {vec2} out the receiving vector
165
+ * @param {ReadonlyVec2} a the first operand
166
+ * @param {ReadonlyVec2} b the second operand
167
+ * @returns {vec2} out
168
+ */
169
+ export function min(out, a, b) {
170
+ out[0] = Math.min(a[0], b[0]);
171
+ out[1] = Math.min(a[1], b[1]);
172
+ return out;
173
+ }
174
+
175
+ /**
176
+ * Returns the maximum of two vec2's
177
+ *
178
+ * @param {vec2} out the receiving vector
179
+ * @param {ReadonlyVec2} a the first operand
180
+ * @param {ReadonlyVec2} b the second operand
181
+ * @returns {vec2} out
182
+ */
183
+ export function max(out, a, b) {
184
+ out[0] = Math.max(a[0], b[0]);
185
+ out[1] = Math.max(a[1], b[1]);
186
+ return out;
187
+ }
188
+
189
+ /**
190
+ * symmetric round the components of a vec2
191
+ *
192
+ * @param {vec2} out the receiving vector
193
+ * @param {ReadonlyVec2} a vector to round
194
+ * @returns {vec2} out
195
+ */
196
+ export function round(out, a) {
197
+ out[0] = glMatrix.round(a[0]);
198
+ out[1] = glMatrix.round(a[1]);
199
+ return out;
200
+ }
201
+
202
+ /**
203
+ * Scales a vec2 by a scalar number
204
+ *
205
+ * @param {vec2} out the receiving vector
206
+ * @param {ReadonlyVec2} a the vector to scale
207
+ * @param {Number} b amount to scale the vector by
208
+ * @returns {vec2} out
209
+ */
210
+ export function scale(out, a, b) {
211
+ out[0] = a[0] * b;
212
+ out[1] = a[1] * b;
213
+ return out;
214
+ }
215
+
216
+ /**
217
+ * Adds two vec2's after scaling the second operand by a scalar value
218
+ *
219
+ * @param {vec2} out the receiving vector
220
+ * @param {ReadonlyVec2} a the first operand
221
+ * @param {ReadonlyVec2} b the second operand
222
+ * @param {Number} scale the amount to scale b by before adding
223
+ * @returns {vec2} out
224
+ */
225
+ export function scaleAndAdd(out, a, b, scale) {
226
+ out[0] = a[0] + b[0] * scale;
227
+ out[1] = a[1] + b[1] * scale;
228
+ return out;
229
+ }
230
+
231
+ /**
232
+ * Calculates the euclidian distance between two vec2's
233
+ *
234
+ * @param {ReadonlyVec2} a the first operand
235
+ * @param {ReadonlyVec2} b the second operand
236
+ * @returns {Number} distance between a and b
237
+ */
238
+ export function distance(a, b) {
239
+ const x = b[0] - a[0];
240
+ const y = b[1] - a[1];
241
+ return Math.sqrt(x * x + y * y);
242
+ }
243
+
244
+ /**
245
+ * Calculates the squared euclidian distance between two vec2's
246
+ *
247
+ * @param {ReadonlyVec2} a the first operand
248
+ * @param {ReadonlyVec2} b the second operand
249
+ * @returns {Number} squared distance between a and b
250
+ */
251
+ export function squaredDistance(a, b) {
252
+ const x = b[0] - a[0];
253
+ const y = b[1] - a[1];
254
+ return x * x + y * y;
255
+ }
256
+
257
+ /**
258
+ * Calculates the length of a vec2
259
+ *
260
+ * @param {ReadonlyVec2} a vector to calculate length of
261
+ * @returns {Number} length of a
262
+ */
263
+ export function length(a) {
264
+ const x = a[0];
265
+ const y = a[1];
266
+ return Math.sqrt(x * x + y * y);
267
+ }
268
+
269
+ /**
270
+ * Calculates the squared length of a vec2
271
+ *
272
+ * @param {ReadonlyVec2} a vector to calculate squared length of
273
+ * @returns {Number} squared length of a
274
+ */
275
+ export function squaredLength(a) {
276
+ const x = a[0];
277
+ const y = a[1];
278
+ return x * x + y * y;
279
+ }
280
+
281
+ /**
282
+ * Negates the components of a vec2
283
+ *
284
+ * @param {vec2} out the receiving vector
285
+ * @param {ReadonlyVec2} a vector to negate
286
+ * @returns {vec2} out
287
+ */
288
+ export function negate(out, a) {
289
+ out[0] = -a[0];
290
+ out[1] = -a[1];
291
+ return out;
292
+ }
293
+
294
+ /**
295
+ * Returns the inverse of the components of a vec2
296
+ *
297
+ * @param {vec2} out the receiving vector
298
+ * @param {ReadonlyVec2} a vector to invert
299
+ * @returns {vec2} out
300
+ */
301
+ export function inverse(out, a) {
302
+ out[0] = 1.0 / a[0];
303
+ out[1] = 1.0 / a[1];
304
+ return out;
305
+ }
306
+
307
+ /**
308
+ * Normalize a vec2
309
+ *
310
+ * @param {vec2} out the receiving vector
311
+ * @param {ReadonlyVec2} a vector to normalize
312
+ * @returns {vec2} out
313
+ */
314
+ export function normalize(out, a) {
315
+ const x = a[0];
316
+ const y = a[1];
317
+ let len = x * x + y * y;
318
+ if (len > 0) {
319
+ // TODO: evaluate use of glm_invsqrt here?
320
+ len = 1 / Math.sqrt(len);
321
+ }
322
+ out[0] = a[0] * len;
323
+ out[1] = a[1] * len;
324
+ return out;
325
+ }
326
+
327
+ /**
328
+ * Calculates the dot product of two vec2's
329
+ *
330
+ * @param {ReadonlyVec2} a the first operand
331
+ * @param {ReadonlyVec2} b the second operand
332
+ * @returns {Number} dot product of a and b
333
+ */
334
+ export function dot(a, b) {
335
+ return a[0] * b[0] + a[1] * b[1];
336
+ }
337
+
338
+ /**
339
+ * Computes the cross product of two vec2's
340
+ * Note that the cross product must by definition produce a 3D vector
341
+ *
342
+ * @param {vec3} out the receiving vector
343
+ * @param {ReadonlyVec2} a the first operand
344
+ * @param {ReadonlyVec2} b the second operand
345
+ * @returns {vec3} out
346
+ */
347
+ export function cross(out, a, b) {
348
+ const z = a[0] * b[1] - a[1] * b[0];
349
+ out[0] = out[1] = 0;
350
+ out[2] = z;
351
+ return out;
352
+ }
353
+
354
+ /**
355
+ * Performs a linear interpolation between two vec2's
356
+ *
357
+ * @param {vec2} out the receiving vector
358
+ * @param {ReadonlyVec2} a the first operand
359
+ * @param {ReadonlyVec2} b the second operand
360
+ * @param {Number} t interpolation amount, in the range [0-1], between the two inputs
361
+ * @returns {vec2} out
362
+ */
363
+ export function lerp(out, a, b, t) {
364
+ const ax = a[0];
365
+ const ay = a[1];
366
+ out[0] = ax + t * (b[0] - ax);
367
+ out[1] = ay + t * (b[1] - ay);
368
+ return out;
369
+ }
370
+
371
+ /**
372
+ * Generates a random vector with the given scale
373
+ *
374
+ * @param {vec2} out the receiving vector
375
+ * @param {Number} [scale] Length of the resulting vector. If omitted, a unit vector will be returned
376
+ * @returns {vec2} out
377
+ */
378
+ export function random(out, scale) {
379
+ scale = scale === undefined ? 1.0 : scale;
380
+ const r = glMatrix.RANDOM() * 2.0 * Math.PI;
381
+ out[0] = Math.cos(r) * scale;
382
+ out[1] = Math.sin(r) * scale;
383
+ return out;
384
+ }
385
+
386
+ /**
387
+ * Transforms the vec2 with a mat2
388
+ *
389
+ * @param {vec2} out the receiving vector
390
+ * @param {ReadonlyVec2} a the vector to transform
391
+ * @param {ReadonlyMat2} m matrix to transform with
392
+ * @returns {vec2} out
393
+ */
394
+ export function transformMat2(out, a, m) {
395
+ const x = a[0];
396
+ const y = a[1];
397
+ out[0] = m[0] * x + m[2] * y;
398
+ out[1] = m[1] * x + m[3] * y;
399
+ return out;
400
+ }
401
+
402
+ /**
403
+ * Transforms the vec2 with a mat2d
404
+ *
405
+ * @param {vec2} out the receiving vector
406
+ * @param {ReadonlyVec2} a the vector to transform
407
+ * @param {ReadonlyMat2d} m matrix to transform with
408
+ * @returns {vec2} out
409
+ */
410
+ export function transformMat2d(out, a, m) {
411
+ const x = a[0];
412
+ const y = a[1];
413
+ out[0] = m[0] * x + m[2] * y + m[4];
414
+ out[1] = m[1] * x + m[3] * y + m[5];
415
+ return out;
416
+ }
417
+
418
+ /**
419
+ * Transforms the vec2 with a mat3
420
+ * 3rd vector component is implicitly '1'
421
+ *
422
+ * @param {vec2} out the receiving vector
423
+ * @param {ReadonlyVec2} a the vector to transform
424
+ * @param {ReadonlyMat3} m matrix to transform with
425
+ * @returns {vec2} out
426
+ */
427
+ export function transformMat3(out, a, m) {
428
+ const x = a[0];
429
+ const y = a[1];
430
+ out[0] = m[0] * x + m[3] * y + m[6];
431
+ out[1] = m[1] * x + m[4] * y + m[7];
432
+ return out;
433
+ }
434
+
435
+ /**
436
+ * Transforms the vec2 with a mat4
437
+ * 3rd vector component is implicitly '0'
438
+ * 4th vector component is implicitly '1'
439
+ *
440
+ * @param {vec2} out the receiving vector
441
+ * @param {ReadonlyVec2} a the vector to transform
442
+ * @param {ReadonlyMat4} m matrix to transform with
443
+ * @returns {vec2} out
444
+ */
445
+ export function transformMat4(out, a, m) {
446
+ const x = a[0];
447
+ const y = a[1];
448
+ out[0] = m[0] * x + m[4] * y + m[12];
449
+ out[1] = m[1] * x + m[5] * y + m[13];
450
+ return out;
451
+ }
452
+
453
+ /**
454
+ * Rotate a 2D vector
455
+ * @param {vec2} out The receiving vec2
456
+ * @param {ReadonlyVec2} a The vec2 point to rotate
457
+ * @param {ReadonlyVec2} b The origin of the rotation
458
+ * @param {Number} rad The angle of rotation in radians
459
+ * @returns {vec2} out
460
+ */
461
+ export function rotate(out, a, b, rad) {
462
+ // Translate point to the origin
463
+ const p0 = a[0] - b[0];
464
+ const p1 = a[1] - b[1];
465
+ const sinC = Math.sin(rad);
466
+ const cosC = Math.cos(rad);
467
+
468
+ // perform rotation and translate to correct position
469
+ out[0] = p0 * cosC - p1 * sinC + b[0];
470
+ out[1] = p0 * sinC + p1 * cosC + b[1];
471
+
472
+ return out;
473
+ }
474
+
475
+ /**
476
+ * Get the angle between two 2D vectors
477
+ * @param {ReadonlyVec2} a The first operand
478
+ * @param {ReadonlyVec2} b The second operand
479
+ * @returns {Number} The angle in radians
480
+ */
481
+ export function angle(a, b) {
482
+ const x1 = a[0];
483
+ const y1 = a[1];
484
+ const x2 = b[0];
485
+ const y2 = b[1];
486
+ // mag is the product of the magnitudes of a and b
487
+ const mag = Math.sqrt((x1 * x1 + y1 * y1) * (x2 * x2 + y2 * y2));
488
+ // mag &&.. short circuits if mag == 0
489
+ const cosine = mag && (x1 * x2 + y1 * y2) / mag;
490
+ // Math.min(Math.max(cosine, -1), 1) clamps the cosine between -1 and 1
491
+ return Math.acos(Math.min(Math.max(cosine, -1), 1));
492
+ }
493
+
494
+ /**
495
+ * Set the components of a vec2 to zero
496
+ *
497
+ * @param {vec2} out the receiving vector
498
+ * @returns {vec2} out
499
+ */
500
+ export function zero(out) {
501
+ out[0] = 0.0;
502
+ out[1] = 0.0;
503
+ return out;
504
+ }
505
+
506
+ /**
507
+ * Returns a string representation of a vector
508
+ *
509
+ * @param {ReadonlyVec2} a vector to represent as a string
510
+ * @returns {String} string representation of the vector
511
+ */
512
+ export function str(a) {
513
+ return `vec2(${a[0]}, ${a[1]})`;
514
+ }
515
+
516
+ /**
517
+ * Returns whether or not the vectors exactly have the same elements in the same position (when compared with ===)
518
+ *
519
+ * @param {ReadonlyVec2} a The first vector.
520
+ * @param {ReadonlyVec2} b The second vector.
521
+ * @returns {Boolean} True if the vectors are equal, false otherwise.
522
+ */
523
+ export function exactEquals(a, b) {
524
+ return a[0] === b[0] && a[1] === b[1];
525
+ }
526
+
527
+ /**
528
+ * Returns whether or not the vectors have approximately the same elements in the same position.
529
+ *
530
+ * @param {ReadonlyVec2} a The first vector.
531
+ * @param {ReadonlyVec2} b The second vector.
532
+ * @returns {Boolean} True if the vectors are equal, false otherwise.
533
+ */
534
+ export function equals(a, b) {
535
+ const a0 = a[0];
536
+ const a1 = a[1];
537
+ const b0 = b[0];
538
+ const b1 = b[1];
539
+ return (
540
+ Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) &&
541
+ Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1))
542
+ );
543
+ }
544
+
545
+ /**
546
+ * Alias for {@link vec2.length}
547
+ * @function
548
+ */
549
+ export const len = length;
550
+
551
+ /**
552
+ * Alias for {@link vec2.subtract}
553
+ * @function
554
+ */
555
+ export const sub = subtract;
556
+
557
+ /**
558
+ * Alias for {@link vec2.multiply}
559
+ * @function
560
+ */
561
+ export const mul = multiply;
562
+
563
+ /**
564
+ * Alias for {@link vec2.divide}
565
+ * @function
566
+ */
567
+ export const div = divide;
568
+
569
+ /**
570
+ * Alias for {@link vec2.distance}
571
+ * @function
572
+ */
573
+ export const dist = distance;
574
+
575
+ /**
576
+ * Alias for {@link vec2.squaredDistance}
577
+ * @function
578
+ */
579
+ export const sqrDist = squaredDistance;
580
+
581
+ /**
582
+ * Alias for {@link vec2.squaredLength}
583
+ * @function
584
+ */
585
+ export const sqrLen = squaredLength;
586
+
587
+ /**
588
+ * Perform some operation over an array of vec2s.
589
+ *
590
+ * @param {Array} a the array of vectors to iterate over
591
+ * @param {Number} stride Number of elements between the start of each vec2. If 0 assumes tightly packed
592
+ * @param {Number} offset Number of elements to skip at the beginning of the array
593
+ * @param {Number} count Number of vec2s to iterate over. If 0 iterates over entire array
594
+ * @param {Function} fn Function to call for each vector in the array
595
+ * @param {Object} [arg] additional argument to pass to fn
596
+ * @returns {Array} a
597
+ * @function
598
+ */
599
+ export const forEach = (function () {
600
+ const vec = create();
601
+
602
+ return function (a, stride, offset, count, fn, arg) {
603
+ let i;
604
+ let l;
605
+ if (!stride) {
606
+ stride = 2;
607
+ }
608
+
609
+ if (!offset) {
610
+ offset = 0;
611
+ }
612
+
613
+ if (count) {
614
+ l = Math.min(count * stride + offset, a.length);
615
+ } else {
616
+ l = a.length;
617
+ }
618
+
619
+ for (i = offset; i < l; i += stride) {
620
+ vec[0] = a[i];
621
+ vec[1] = a[i + 1];
622
+ fn(vec, vec, arg);
623
+ a[i] = vec[0];
624
+ a[i + 1] = vec[1];
625
+ }
626
+
627
+ return a;
628
+ };
629
+ })();