linearly 0.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.
- package/LICENSE +21 -0
- package/README.md +3 -0
- package/lib/common.d.ts +11 -0
- package/lib/common.js +16 -0
- package/lib/index.d.ts +16 -0
- package/lib/index.js +9 -0
- package/lib/mat2.d.ts +78 -0
- package/lib/mat2.js +155 -0
- package/lib/mat2d.d.ts +89 -0
- package/lib/mat2d.js +238 -0
- package/lib/mat2d.test.d.ts +1 -0
- package/lib/mat2d.test.js +88 -0
- package/lib/mat3.d.ts +117 -0
- package/lib/mat3.js +390 -0
- package/lib/mat4.d.ts +310 -0
- package/lib/mat4.js +1173 -0
- package/lib/quat.d.ts +218 -0
- package/lib/quat.js +459 -0
- package/lib/vec2.d.ts +58 -0
- package/lib/vec2.js +135 -0
- package/lib/vec2.test.d.ts +1 -0
- package/lib/vec2.test.js +105 -0
- package/lib/vec3.d.ts +159 -0
- package/lib/vec3.js +326 -0
- package/lib/vec3.test.d.ts +1 -0
- package/lib/vec3.test.js +105 -0
- package/lib/vec4.d.ts +108 -0
- package/lib/vec4.js +241 -0
- package/package.json +50 -0
package/lib/vec3.js
ADDED
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
import * as Common from './common';
|
|
2
|
+
/**
|
|
3
|
+
* Adds two vec3's
|
|
4
|
+
*/
|
|
5
|
+
export function add(a, b) {
|
|
6
|
+
return [a[0] + b[0], a[1] + b[1], a[2] + b[2]];
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Subtracts vector b from vector a
|
|
10
|
+
*/
|
|
11
|
+
export function subtract(a, b) {
|
|
12
|
+
return [a[0] - b[0], a[1] - b[1], a[2] - b[2]];
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Multiplies two vec3's
|
|
16
|
+
*/
|
|
17
|
+
export function multiply(a, b) {
|
|
18
|
+
return [a[0] * b[0], a[1] * b[1], a[2] * b[2]];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Divides two vec3's
|
|
22
|
+
*/
|
|
23
|
+
export function divide(a, b) {
|
|
24
|
+
return [a[0] / b[0], a[1] / b[1], a[2] / b[2]];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Math.ceil the components of a vec3
|
|
28
|
+
*/
|
|
29
|
+
export function ceil(a) {
|
|
30
|
+
return [Math.ceil(a[0]), Math.ceil(a[1]), Math.ceil(a[2])];
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Math.floor the components of a vec3
|
|
34
|
+
*/
|
|
35
|
+
export function floor(a) {
|
|
36
|
+
return [Math.floor(a[0]), Math.floor(a[1]), Math.floor(a[2])];
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Returns the minimum of two vec3's
|
|
40
|
+
*/
|
|
41
|
+
export function min(a, b) {
|
|
42
|
+
return [Math.min(a[0], b[0]), Math.min(a[1], b[1]), Math.min(a[2], b[2])];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Returns the maximum of two vec3's
|
|
46
|
+
*/
|
|
47
|
+
export function max(a, b) {
|
|
48
|
+
return [Math.max(a[0], b[0]), Math.max(a[1], b[1]), Math.max(a[2], b[2])];
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* symmetric round the components of a vec3
|
|
52
|
+
*/
|
|
53
|
+
export function round(a) {
|
|
54
|
+
return [Common.round(a[0]), Common.round(a[1]), Common.round(a[2])];
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Scales a vec3 by a scalar number
|
|
58
|
+
*/
|
|
59
|
+
export function scale(a, s) {
|
|
60
|
+
return [a[0] * s, a[1] * s, a[2] * s];
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Adds two vec3's after scaling the second operand by a scalar value
|
|
64
|
+
*/
|
|
65
|
+
export function scaleAndAdd(a, b, scale) {
|
|
66
|
+
return [a[0] + b[0] * scale, a[1] + b[1] * scale, a[2] + b[2] * scale];
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Calculates the euclidian distance between two vec3's
|
|
70
|
+
*/
|
|
71
|
+
export function distance(a, b) {
|
|
72
|
+
const x = b[0] - a[0];
|
|
73
|
+
const y = b[1] - a[1];
|
|
74
|
+
const z = b[2] - a[2];
|
|
75
|
+
return Math.sqrt(x * x + y * y + z * z);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Calculates the squared euclidian distance between two vec3's
|
|
79
|
+
*/
|
|
80
|
+
export function squaredDistance(a, b) {
|
|
81
|
+
const x = b[0] - a[0];
|
|
82
|
+
const y = b[1] - a[1];
|
|
83
|
+
const z = b[2] - a[2];
|
|
84
|
+
return x * x + y * y + z * z;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Calculates the length of a vec3
|
|
88
|
+
*/
|
|
89
|
+
export function length(a) {
|
|
90
|
+
const [x, y, z] = a;
|
|
91
|
+
return Math.sqrt(x * x + y * y + z * z);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Calculates the squared length of a vec3
|
|
95
|
+
*/
|
|
96
|
+
export function squaredLength(a) {
|
|
97
|
+
const x = a[0];
|
|
98
|
+
const y = a[1];
|
|
99
|
+
const z = a[2];
|
|
100
|
+
return x * x + y * y + z * z;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Negates the components of a vec3
|
|
104
|
+
*/
|
|
105
|
+
export function negate(a) {
|
|
106
|
+
return [-a[0], -a[1], -a[2]];
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Returns the inverse of the components of a vec3
|
|
110
|
+
*/
|
|
111
|
+
export function inverse(a) {
|
|
112
|
+
return [1 / a[0], 1 / a[1], 1 / a[2]];
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Normalize a vec3
|
|
116
|
+
*/
|
|
117
|
+
export function normalize(a) {
|
|
118
|
+
const [x, y, z] = a;
|
|
119
|
+
const hyp = x * x + y * y + z * z;
|
|
120
|
+
const len = hyp === 0 ? 0 : 1 / Math.sqrt(hyp);
|
|
121
|
+
return [a[0] * len, a[1] * len, a[2] * len];
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Calculates the dot product of two vec3's
|
|
125
|
+
*/
|
|
126
|
+
export function dot(a, b) {
|
|
127
|
+
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Computes the cross product of two vec3's
|
|
131
|
+
*/
|
|
132
|
+
export function cross(a, b) {
|
|
133
|
+
const [ax, ay, az] = a;
|
|
134
|
+
const [bx, by, bz] = b;
|
|
135
|
+
return [ay * bz - az * by, az * bx - ax * bz, ax * by - ay * bx];
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Performs a linear interpolation between two vec3's
|
|
139
|
+
*/
|
|
140
|
+
export function lerp(a, b, t) {
|
|
141
|
+
const [ax, ay, az] = a;
|
|
142
|
+
return [ax + t * (b[0] - ax), ay + t * (b[1] - ay), az + t * (b[2] - az)];
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Performs a spherical linear interpolation between two vec3's
|
|
146
|
+
*/
|
|
147
|
+
export function slerp(a, b, t) {
|
|
148
|
+
const angle = Math.acos(Math.min(Math.max(dot(a, b), -1), 1));
|
|
149
|
+
const sinTotal = Math.sin(angle);
|
|
150
|
+
const ratioA = Math.sin((1 - t) * angle) / sinTotal;
|
|
151
|
+
const ratioB = Math.sin(t * angle) / sinTotal;
|
|
152
|
+
return [
|
|
153
|
+
ratioA * a[0] + ratioB * b[0],
|
|
154
|
+
ratioA * a[1] + ratioB * b[1],
|
|
155
|
+
ratioA * a[2] + ratioB * b[2],
|
|
156
|
+
];
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Performs a hermite interpolation with two control points
|
|
160
|
+
*
|
|
161
|
+
* @param a the first operand
|
|
162
|
+
* @param b the second operand
|
|
163
|
+
* @param c the third operand
|
|
164
|
+
* @param d the fourth operand
|
|
165
|
+
* @param t interpolation amount, in the range [0-1], between the two inputs
|
|
166
|
+
*/
|
|
167
|
+
export function hermite(a, b, c, d, t) {
|
|
168
|
+
const factorTimes2 = t * t;
|
|
169
|
+
const factor1 = factorTimes2 * (2 * t - 3) + 1;
|
|
170
|
+
const factor2 = factorTimes2 * (t - 2) + t;
|
|
171
|
+
const factor3 = factorTimes2 * (t - 1);
|
|
172
|
+
const factor4 = factorTimes2 * (3 - 2 * t);
|
|
173
|
+
return [
|
|
174
|
+
a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4,
|
|
175
|
+
a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4,
|
|
176
|
+
a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4,
|
|
177
|
+
];
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Performs a bezier interpolation with two control points
|
|
181
|
+
*/
|
|
182
|
+
export function bezier(a, b, c, d, t) {
|
|
183
|
+
const inverseFactor = 1 - t;
|
|
184
|
+
const inverseFactorTimesTwo = inverseFactor * inverseFactor;
|
|
185
|
+
const factorTimes2 = t * t;
|
|
186
|
+
const factor1 = inverseFactorTimesTwo * inverseFactor;
|
|
187
|
+
const factor2 = 3 * t * inverseFactorTimesTwo;
|
|
188
|
+
const factor3 = 3 * factorTimes2 * inverseFactor;
|
|
189
|
+
const factor4 = factorTimes2 * t;
|
|
190
|
+
return [
|
|
191
|
+
a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4,
|
|
192
|
+
a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4,
|
|
193
|
+
a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4,
|
|
194
|
+
];
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Transforms the vec3 with a mat4.
|
|
198
|
+
* 4th vector component is implicitly '1'
|
|
199
|
+
*/
|
|
200
|
+
export function transformMat4(a, m) {
|
|
201
|
+
const [x, y, z] = a;
|
|
202
|
+
const w = m[3] * x + m[7] * y + m[11] * z + m[15] || 1;
|
|
203
|
+
return [
|
|
204
|
+
(m[0] * x + m[4] * y + m[8] * z + m[12]) / w,
|
|
205
|
+
(m[1] * x + m[5] * y + m[9] * z + m[13]) / w,
|
|
206
|
+
(m[2] * x + m[6] * y + m[10] * z + m[14]) / w,
|
|
207
|
+
];
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Transforms the vec3 with a mat3.
|
|
211
|
+
*/
|
|
212
|
+
export function transformMat3(a, m) {
|
|
213
|
+
const x = a[0], y = a[1], z = a[2];
|
|
214
|
+
return [
|
|
215
|
+
x * m[0] + y * m[3] + z * m[6],
|
|
216
|
+
x * m[1] + y * m[4] + z * m[7],
|
|
217
|
+
x * m[2] + y * m[5] + z * m[8],
|
|
218
|
+
];
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Transforms the vec3 with a quat
|
|
222
|
+
* Can also be used for dual quaternions. (Multiply it with the real part)
|
|
223
|
+
*
|
|
224
|
+
* @param a the vector to transform
|
|
225
|
+
* @param q quaternion to transform with
|
|
226
|
+
*/
|
|
227
|
+
// https://github.com/stackgl/gl-vec3/blob/master/transformQuat.js
|
|
228
|
+
export function transformQuat(a, q) {
|
|
229
|
+
// benchmarks: http://jsperf.com/quaternion-transform-vec3-implementations
|
|
230
|
+
const x = a[0], y = a[1], z = a[2], qx = q[0], qy = q[1], qz = q[2], qw = q[3],
|
|
231
|
+
// calculate quat * vec
|
|
232
|
+
ix = qw * x + qy * z - qz * y, iy = qw * y + qz * x - qx * z, iz = qw * z + qx * y - qy * x, iw = -qx * x - qy * y - qz * z;
|
|
233
|
+
// calculate result * inverse quat
|
|
234
|
+
return [
|
|
235
|
+
ix * qw + iw * -qx + iy * -qz - iz * -qy,
|
|
236
|
+
iy * qw + iw * -qy + iz * -qx - ix * -qz,
|
|
237
|
+
iz * qw + iw * -qz + ix * -qy - iy * -qx,
|
|
238
|
+
];
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Rotate a 3D vector around the x-axis
|
|
242
|
+
* @param a The vec3 point to rotate
|
|
243
|
+
* @param b The origin of the rotation
|
|
244
|
+
* @param rad The angle of rotation in radians
|
|
245
|
+
*/
|
|
246
|
+
export function rotateX(a, b, rad) {
|
|
247
|
+
//Translate point to the origin
|
|
248
|
+
const p = [a[0] - b[0], a[1] - b[1], a[2] - b[2]];
|
|
249
|
+
//perform rotation
|
|
250
|
+
const r = [
|
|
251
|
+
p[0],
|
|
252
|
+
p[1] * Math.cos(rad) - p[2] * Math.sin(rad),
|
|
253
|
+
p[1] * Math.sin(rad) + p[2] * Math.cos(rad),
|
|
254
|
+
];
|
|
255
|
+
//translate to correct position
|
|
256
|
+
return [r[0] + b[0], r[1] + b[1], r[2] + b[2]];
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Rotate a 3D vector around the y-axis
|
|
260
|
+
* @param a The vec3 point to rotate
|
|
261
|
+
* @param origin The origin of the rotation
|
|
262
|
+
* @param rad The angle of rotation in radians
|
|
263
|
+
*/
|
|
264
|
+
export function rotateY(a, origin, rad) {
|
|
265
|
+
//Translate point to the origin
|
|
266
|
+
const p = [a[0] - origin[0], a[1] - origin[1], a[2] - origin[2]];
|
|
267
|
+
//perform rotation
|
|
268
|
+
const r = [
|
|
269
|
+
p[2] * Math.sin(rad) + p[0] * Math.cos(rad),
|
|
270
|
+
p[1],
|
|
271
|
+
p[2] * Math.cos(rad) - p[0] * Math.sin(rad),
|
|
272
|
+
];
|
|
273
|
+
//translate to correct position
|
|
274
|
+
return [r[0] + origin[0], r[1] + origin[1], r[2] + origin[2]];
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Rotate a 3D vector around the z-axis
|
|
278
|
+
* @param a The vec3 point to rotate
|
|
279
|
+
* @param b The origin of the rotation
|
|
280
|
+
* @param rad The angle of rotation in radians
|
|
281
|
+
*/
|
|
282
|
+
export function rotateZ(a, b, rad) {
|
|
283
|
+
//Translate point to the origin
|
|
284
|
+
const p = [a[0] - b[0], a[1] - b[1], a[2] - b[2]];
|
|
285
|
+
//perform rotation
|
|
286
|
+
const r = [
|
|
287
|
+
p[0] * Math.cos(rad) - p[1] * Math.sin(rad),
|
|
288
|
+
p[0] * Math.sin(rad) + p[1] * Math.cos(rad),
|
|
289
|
+
p[2],
|
|
290
|
+
];
|
|
291
|
+
//translate to correct position
|
|
292
|
+
return [r[0] + b[0], r[1] + b[1], r[2] + b[2]];
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Get the angle between two 3D vectors
|
|
296
|
+
* @param a The first operand
|
|
297
|
+
* @param b The second operand
|
|
298
|
+
* @returns The angle in radians
|
|
299
|
+
*/
|
|
300
|
+
export function angle(a, b) {
|
|
301
|
+
const [ax, ay, az] = a;
|
|
302
|
+
const [bx, by, bz] = b;
|
|
303
|
+
const mag = Math.sqrt((ax * ax + ay * ay + az * az) * (bx * bx + by * by + bz * bz));
|
|
304
|
+
const cosine = mag && dot(a, b) / mag;
|
|
305
|
+
return Math.acos(Math.min(Math.max(cosine, -1), 1));
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)
|
|
309
|
+
*/
|
|
310
|
+
export function exactEquals(a, b) {
|
|
311
|
+
return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Returns whether or not the vectors have approximately the same elements in the same position.
|
|
315
|
+
*/
|
|
316
|
+
export function equals(a, b) {
|
|
317
|
+
const [a0, a1, a2] = a;
|
|
318
|
+
const [b0, b1, b2] = b;
|
|
319
|
+
return (Math.abs(a0 - b0) <=
|
|
320
|
+
Common.EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) &&
|
|
321
|
+
Math.abs(a1 - b1) <=
|
|
322
|
+
Common.EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)) &&
|
|
323
|
+
Math.abs(a2 - b2) <=
|
|
324
|
+
Common.EPSILON * Math.max(1, Math.abs(a2), Math.abs(b2)));
|
|
325
|
+
}
|
|
326
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVjMy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZWMzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sS0FBSyxNQUFNLE1BQU0sVUFBVSxDQUFBO0FBS2xDOztHQUVHO0FBQ0gsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFPLEVBQUUsQ0FBTztJQUNuQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUMvQyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFDLENBQU8sRUFBRSxDQUFPO0lBQ3hDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQy9DLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQUMsQ0FBTyxFQUFFLENBQU87SUFDeEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDL0MsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FBQyxDQUFPLEVBQUUsQ0FBTztJQUN0QyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUMvQyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsSUFBSSxDQUFDLENBQU87SUFDM0IsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDM0QsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLEtBQUssQ0FBQyxDQUFPO0lBQzVCLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQzlELENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBTyxFQUFFLENBQU87SUFDbkMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDMUUsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFPLEVBQUUsQ0FBTztJQUNuQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUMxRSxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsS0FBSyxDQUFDLENBQU87SUFDNUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDcEUsQ0FBQztBQUNEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLEtBQUssQ0FBQyxDQUFPLEVBQUUsQ0FBUztJQUN2QyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtBQUN0QyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLENBQU8sRUFBRSxDQUFPLEVBQUUsS0FBYTtJQUMxRCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQTtBQUN2RSxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFDLENBQU8sRUFBRSxDQUFPO0lBQ3hDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDckIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNyQixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3JCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO0FBQ3hDLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsQ0FBTyxFQUFFLENBQU87SUFDL0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNyQixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3JCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUM3QixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUFDLENBQU87SUFDN0IsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ25CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO0FBQ3hDLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUMsQ0FBTztJQUNwQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQzdCLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQUMsQ0FBTztJQUM3QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUM3QixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUFDLENBQU87SUFDOUIsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDdEMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FBQyxDQUFPO0lBQ2hDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNuQixNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzlDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFBO0FBQzVDLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBTyxFQUFFLENBQU87SUFDbkMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUMvQyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsS0FBSyxDQUFDLENBQU8sRUFBRSxDQUFPO0lBQ3JDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN0QixNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUE7SUFFdEIsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUE7QUFDakUsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLElBQUksQ0FBQyxDQUFPLEVBQUUsQ0FBTyxFQUFFLENBQVM7SUFDL0MsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBRXRCLE9BQU8sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFBO0FBQzFFLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxLQUFLLENBQUMsQ0FBTyxFQUFFLENBQU8sRUFBRSxDQUFTO0lBQ2hELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzdELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFaEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxRQUFRLENBQUE7SUFDbkQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFBO0lBRTdDLE9BQU87UUFDTixNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENB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Q1QsT0FBTztRQUNOLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzlCLENBQUE7QUFDRixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsa0VBQWtFO0FBQ2xFLE1BQU0sVUFBVSxhQUFhLENBQUMsQ0FBTyxFQUFFLENBQU87SUFDN0MsMEVBQTBFO0lBRTFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDYixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ1IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDVCx1QkFBdUI7SUFDdkIsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUM3QixFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQzdCLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENB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Q0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLEtBQUssQ0FBQyxDQUFPLEVBQUUsQ0FBTztJQUNyQyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDdEIsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3RCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQ3BCLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQzdELENBQUE7SUFDRCxNQUFNLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUE7SUFFckMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ3BELENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsQ0FBTyxFQUFFLENBQU87SUFDM0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUN2RCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUFDLENBQU8sRUFBRSxDQUFPO0lBQ3RDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN0QixNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUE7SUFFdEIsT0FBTyxDQUNOLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQ3pELENBQUE7QUFDRixDQUFDIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/lib/vec3.test.js
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { EPSILON } from './common';
|
|
2
|
+
import * as vec3 from './vec3';
|
|
3
|
+
// https://github.com/stackgl/gl-vec3/blob/master/test/index.js
|
|
4
|
+
test('add', () => {
|
|
5
|
+
expect(vec3.add([0, 1, 2], [3, 4, 5])).toEqual([3, 5, 7]);
|
|
6
|
+
});
|
|
7
|
+
test('angle', () => {
|
|
8
|
+
expect(vec3.angle([3, 4, 5], [6, 7, 8])).toEqual(0.0852402656588635);
|
|
9
|
+
});
|
|
10
|
+
test('ceil', () => {
|
|
11
|
+
expect(vec3.ceil([5.2, 6.5, 7.9])).toEqual([6, 7, 8]);
|
|
12
|
+
});
|
|
13
|
+
test('cross', () => {
|
|
14
|
+
expect(vec3.cross([3, 4, 5], [6, 7, 8])).toEqual([-3, 6, -3]);
|
|
15
|
+
});
|
|
16
|
+
test('distance', () => {
|
|
17
|
+
expect(vec3.distance([1, 2, 3], [4, 6, 7])).toEqual(6.4031242374328485);
|
|
18
|
+
});
|
|
19
|
+
test('divide', () => {
|
|
20
|
+
expect(vec3.divide([8, 4, 2], [2, 1, 0.5])).toEqual([4, 4, 4]);
|
|
21
|
+
});
|
|
22
|
+
test('dot', () => {
|
|
23
|
+
expect(vec3.dot([3, 4, 5], [6, 7, 8])).toEqual(86);
|
|
24
|
+
});
|
|
25
|
+
test('equals', () => {
|
|
26
|
+
expect(vec3.equals([3 + EPSILON, 5 - EPSILON, 4 + EPSILON], [3, 5, 4])).toBe(true);
|
|
27
|
+
expect(vec3.equals([3 + EPSILON * 10, 5, 4], [3, 5, 4])).toBe(false);
|
|
28
|
+
expect(vec3.equals([3, 5 - EPSILON * 10, 4], [3, 5, 4])).toBe(false);
|
|
29
|
+
expect(vec3.equals([3, 5, 4 + EPSILON * 10], [3, 5, 4])).toBe(false);
|
|
30
|
+
});
|
|
31
|
+
test('exactEquals', () => {
|
|
32
|
+
expect(vec3.exactEquals([3, 5, 4], [3, 5, 4])).toBe(true);
|
|
33
|
+
expect(vec3.exactEquals([3 + EPSILON, 5, 4], [3, 5, 4])).toBe(false);
|
|
34
|
+
expect(vec3.exactEquals([3, 5 + EPSILON, 4], [3, 5, 4])).toBe(false);
|
|
35
|
+
expect(vec3.exactEquals([3, 5, 4 + EPSILON], [3, 5, 4])).toBe(false);
|
|
36
|
+
});
|
|
37
|
+
test('floor', () => {
|
|
38
|
+
expect(vec3.floor([5.2, 6.6, 7.9])).toEqual([5, 6, 7]);
|
|
39
|
+
});
|
|
40
|
+
test('inverse', () => {
|
|
41
|
+
expect(vec3.inverse([2, 4, 8])).toEqual([0.5, 0.25, 0.125]);
|
|
42
|
+
});
|
|
43
|
+
test('length', () => {
|
|
44
|
+
expect(vec3.length([3, 4, 5])).toEqual(7.0710678118654755);
|
|
45
|
+
});
|
|
46
|
+
test('lerp', () => {
|
|
47
|
+
expect(vec3.lerp([3, 4, 5], [6, 7, 8], 0.25)).toEqual([3.75, 4.75, 5.75]);
|
|
48
|
+
});
|
|
49
|
+
test('max', () => {
|
|
50
|
+
expect(vec3.max([3, 7, 2], [5, 6, 4])).toEqual([5, 7, 4]);
|
|
51
|
+
});
|
|
52
|
+
test('min', () => {
|
|
53
|
+
expect(vec3.min([3, 7, 8], [5, 6, 2])).toEqual([3, 6, 2]);
|
|
54
|
+
});
|
|
55
|
+
test('multiply', () => {
|
|
56
|
+
expect(vec3.multiply([3, 4, 5], [6, 7, 8])).toEqual([18, 28, 40]);
|
|
57
|
+
});
|
|
58
|
+
test('negate', () => {
|
|
59
|
+
expect(vec3.negate([3, 4, 5])).toEqual([-3, -4, -5]);
|
|
60
|
+
});
|
|
61
|
+
test('normalize', () => {
|
|
62
|
+
expect(vec3.normalize([3, 4, 5])).toEqual([
|
|
63
|
+
0.4242640687119285, 0.565685424949238, 0.7071067811865475,
|
|
64
|
+
]);
|
|
65
|
+
});
|
|
66
|
+
test('rotateX', () => {
|
|
67
|
+
expect(vec3.rotateX([3, 4, 5], [6, 7, 8], Math.PI)).toEqual([3, 10, 11]);
|
|
68
|
+
});
|
|
69
|
+
test('rotateY', () => {
|
|
70
|
+
expect(vec3.rotateY([3, 4, 5], [6, 7, 8], Math.PI)).toEqual([9, 4, 11]);
|
|
71
|
+
});
|
|
72
|
+
test('rotateZ', () => {
|
|
73
|
+
expect(vec3.rotateZ([3, 4, 5], [6, 7, 8], Math.PI)).toEqual([9, 10, 5]);
|
|
74
|
+
});
|
|
75
|
+
test('scale', () => {
|
|
76
|
+
expect(vec3.scale([3, 4, 5], 2)).toEqual([6, 8, 10]);
|
|
77
|
+
});
|
|
78
|
+
test('scaleAndAdd', () => {
|
|
79
|
+
expect(vec3.scaleAndAdd([3, 4, 5], [6, 7, 8], 2)).toEqual([15, 18, 21]);
|
|
80
|
+
});
|
|
81
|
+
test('round', () => {
|
|
82
|
+
expect(vec3.round([5.2, 6.6, 8.5])).toEqual([5, 7, 9]);
|
|
83
|
+
});
|
|
84
|
+
test('squaredDistance', () => {
|
|
85
|
+
expect(vec3.squaredDistance([3, 4, 5], [6, 7, 8])).toEqual(27);
|
|
86
|
+
});
|
|
87
|
+
test('squaredLength', () => {
|
|
88
|
+
expect(vec3.squaredLength([3, 4, 5])).toEqual(50);
|
|
89
|
+
});
|
|
90
|
+
test('subtract', () => {
|
|
91
|
+
expect(vec3.subtract([3, 4, 5], [6, 7, 8])).toEqual([-3, -3, -3]);
|
|
92
|
+
});
|
|
93
|
+
test('sub', () => {
|
|
94
|
+
expect(vec3.subtract([3, 4, 5], [6, 7, 8])).toEqual([-3, -3, -3]);
|
|
95
|
+
});
|
|
96
|
+
test('transformMat3', () => {
|
|
97
|
+
expect(vec3.transformMat3([3, 4, 5], [5, 6, 7, 8, 9, 10, 11, 12, 13])).toEqual([102, 114, 126]);
|
|
98
|
+
});
|
|
99
|
+
test('transformMat4', () => {
|
|
100
|
+
expect(vec3.transformMat4([3, 4, 5], [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20])).toEqual([0.7732558139534884, 0.8488372093023255, 0.9244186046511628]);
|
|
101
|
+
});
|
|
102
|
+
test('transformQuat', () => {
|
|
103
|
+
expect(vec3.transformQuat([3, 4, 5], [6, 7, 8, 9])).toEqual([882, 824, 1090]);
|
|
104
|
+
});
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVjMy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3ZlYzMudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sVUFBVSxDQUFBO0FBQ2hDLE9BQU8sS0FBSyxJQUFJLE1BQU0sUUFBUSxDQUFBO0FBRTlCLCtEQUErRDtBQUUvRCxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtJQUNoQixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDMUQsQ0FBQyxDQUFDLENBQUE7QUFFRixJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtJQUNsQixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtBQUNyRSxDQUFDLENBQUMsQ0FBQTtBQUVGLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO0lBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ3RELENBQUMsQ0FBQyxDQUFBO0FBRUYsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7SUFDbEIsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUM5RCxDQUFDLENBQUMsQ0FBQTtBQUVGLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFO0lBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO0FBQ3hFLENBQUMsQ0FBQyxDQUFBO0FBRUYsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7SUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQy9ELENBQUMsQ0FBQyxDQUFBO0FBRUYsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUU7SUFDaEIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0FBQ25ELENBQUMsQ0FBQyxDQUFBO0FBRUYsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7SUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMzRSxJQUFJLENBQ0osQ0FBQTtJQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3BFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3BFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQ3JFLENBQUMsQ0FBQyxDQUFBO0FBRUYsSUFBSSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUU7SUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3pELE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDcEUsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNwRSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQ3JFLENBQUMsQ0FBQyxDQUFBO0FBRUYsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7SUFDbEIsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDdkQsQ0FBQyxDQUFDLENBQUE7QUFFRixJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtJQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQTtBQUM1RCxDQUFDLENBQUMsQ0FBQTtBQUVGLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO0lBQ25CLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUE7QUFDM0QsQ0FBQyxDQUFDLENBQUE7QUFFRixJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtJQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBO0FBQzFFLENBQUMsQ0FBQyxDQUFBO0FBRUYsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUU7SUFDaEIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQzFELENBQUMsQ0FBQyxDQUFBO0FBRUYsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUU7SUFDaEIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQzFELENBQUMsQ0FBQyxDQUFBO0FBRUYsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUU7SUFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFBO0FBQ2xFLENBQUMsQ0FBQyxDQUFBO0FBRUYsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7SUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDckQsQ0FBQyxDQUFDLENBQUE7QUFFRixJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRTtJQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUN6QyxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0I7S0FDekQsQ0FBQyxDQUFBO0FBQ0gsQ0FBQyxDQUFDLENBQUE7QUFFRixJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtJQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUN6RSxDQUFDLENBQUMsQ0FBQTtBQUVGLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO0lBQ3BCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFBO0FBQ3hFLENBQUMsQ0FBQyxDQUFBO0FBRUYsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7SUFDcEIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDeEUsQ0FBQyxDQUFDLENBQUE7QUFFRixJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtJQUNsQixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUE7QUFDckQsQ0FBQyxDQUFDLENBQUE7QUFFRixJQUFJLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRTtJQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFB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
|
package/lib/vec4.d.ts
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { Mat4 } from './mat4';
|
|
2
|
+
import { Quat } from './quat';
|
|
3
|
+
export type Vec4 = readonly [number, number, number, number];
|
|
4
|
+
/**
|
|
5
|
+
* Adds two vec4's
|
|
6
|
+
*/
|
|
7
|
+
export declare function add(a: Vec4, b: Vec4): Vec4;
|
|
8
|
+
/**
|
|
9
|
+
* Subtracts vector b from vector a
|
|
10
|
+
*/
|
|
11
|
+
export declare function subtract(a: Vec4, b: Vec4): Vec4;
|
|
12
|
+
/**
|
|
13
|
+
* Multiplies two vec4's
|
|
14
|
+
*/
|
|
15
|
+
export declare function multiply(a: Vec4, b: Vec4): Vec4;
|
|
16
|
+
/**
|
|
17
|
+
* Divides two vec4's
|
|
18
|
+
*/
|
|
19
|
+
export declare function divide(a: Vec4, b: Vec4): Vec4;
|
|
20
|
+
/**
|
|
21
|
+
* Math.ceil the components of a vec4
|
|
22
|
+
*/
|
|
23
|
+
export declare function ceil(a: Vec4): Vec4;
|
|
24
|
+
/**
|
|
25
|
+
* Math.floor the components of a vec4
|
|
26
|
+
*/
|
|
27
|
+
export declare function floor(a: Vec4): Vec4;
|
|
28
|
+
/**
|
|
29
|
+
* Returns the minimum of two vec4's
|
|
30
|
+
*/
|
|
31
|
+
export declare function min(a: Vec4, b: Vec4): Vec4;
|
|
32
|
+
/**
|
|
33
|
+
* Returns the maximum of two vec4's
|
|
34
|
+
*/
|
|
35
|
+
export declare function max(a: Vec4, b: Vec4): Vec4;
|
|
36
|
+
/**
|
|
37
|
+
* symmetric round the components of a vec4
|
|
38
|
+
*/
|
|
39
|
+
export declare function round(a: Vec4): Vec4;
|
|
40
|
+
/**
|
|
41
|
+
* Scales a vec4 by a scalar number
|
|
42
|
+
*
|
|
43
|
+
* @param a the vector to scale
|
|
44
|
+
* @param s amount to scale the vector by
|
|
45
|
+
*/
|
|
46
|
+
export declare function scale(a: Vec4, s: number): Vec4;
|
|
47
|
+
/**
|
|
48
|
+
* Adds two vec4's after scaling the second operand by a scalar value
|
|
49
|
+
* @param scale the amount to scale b by before adding
|
|
50
|
+
*/
|
|
51
|
+
export declare function scaleAndAdd(a: Vec4, b: Vec4, scale: number): Vec4;
|
|
52
|
+
/**
|
|
53
|
+
* Calculates the euclidian distance between two vec4's
|
|
54
|
+
*/
|
|
55
|
+
export declare function distance(a: Vec4, b: Vec4): number;
|
|
56
|
+
/**
|
|
57
|
+
* Calculates the squared euclidian distance between two vec4's
|
|
58
|
+
*/
|
|
59
|
+
export declare function squaredDistance(a: Vec4, b: Vec4): number;
|
|
60
|
+
/**
|
|
61
|
+
* Calculates the length of a vec4
|
|
62
|
+
*/
|
|
63
|
+
export declare function length(a: Vec4): number;
|
|
64
|
+
/**
|
|
65
|
+
* Calculates the squared length of a vec4
|
|
66
|
+
*/
|
|
67
|
+
export declare function squaredLength(a: Vec4): number;
|
|
68
|
+
/**
|
|
69
|
+
* Negates the components of a vec4
|
|
70
|
+
*/
|
|
71
|
+
export declare function negate(a: Vec4): Vec4;
|
|
72
|
+
/**
|
|
73
|
+
* Returns the inverse of the components of a vec4
|
|
74
|
+
*/
|
|
75
|
+
export declare function inverse(a: Vec4): Vec4;
|
|
76
|
+
/**
|
|
77
|
+
* Normalize a vec4
|
|
78
|
+
*/
|
|
79
|
+
export declare function normalize(a: Vec4): Vec4;
|
|
80
|
+
/**
|
|
81
|
+
* Calculates the dot product of two vec4's
|
|
82
|
+
*/
|
|
83
|
+
export declare function dot(a: Vec4, b: Vec4): number;
|
|
84
|
+
/**
|
|
85
|
+
* Returns the cross-product of three vectors in a 4-dimensional space
|
|
86
|
+
*/
|
|
87
|
+
export declare function cross(u: Vec4, v: Vec4, w: Vec4): Vec4;
|
|
88
|
+
/**
|
|
89
|
+
* Performs a linear interpolation between two vec4's
|
|
90
|
+
* @param t interpolation amount, in the range [0-1], between the two inputs
|
|
91
|
+
*/
|
|
92
|
+
export declare function lerp(a: Vec4, b: Vec4, t: number): Vec4;
|
|
93
|
+
/**
|
|
94
|
+
* Transforms the vec4 with a mat4.
|
|
95
|
+
*/
|
|
96
|
+
export declare function transformMat4(a: Vec4, m: Mat4): Vec4;
|
|
97
|
+
/**
|
|
98
|
+
* Transforms the vec4 with a quat
|
|
99
|
+
*/
|
|
100
|
+
export declare function transformQuat(a: Vec4, q: Quat): Vec4;
|
|
101
|
+
/**
|
|
102
|
+
* Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)
|
|
103
|
+
*/
|
|
104
|
+
export declare function exactEquals(a: Vec4, b: Vec4): boolean;
|
|
105
|
+
/**
|
|
106
|
+
* Returns whether or not the vectors have approximately the same elements in the same position.
|
|
107
|
+
*/
|
|
108
|
+
export declare function equals(a: Vec4, b: Vec4): boolean;
|