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/lib/vec2.js ADDED
@@ -0,0 +1,135 @@
1
+ import * as Common from './common';
2
+ export function add(a, b) {
3
+ return [a[0] + b[0], a[1] + b[1]];
4
+ }
5
+ export function subtract(a, b) {
6
+ return [a[0] - b[0], a[1] - b[1]];
7
+ }
8
+ export function multiply(a, b) {
9
+ return [a[0] * b[0], a[1] * b[1]];
10
+ }
11
+ export function divide(a, b) {
12
+ return [a[0] / b[0], a[1] / b[1]];
13
+ }
14
+ export function ceil(a) {
15
+ return [Math.ceil(a[0]), Math.ceil(a[1])];
16
+ }
17
+ export function floor(a) {
18
+ return [Math.floor(a[0]), Math.floor(a[1])];
19
+ }
20
+ export function min(a, b) {
21
+ return [Math.min(a[0], b[0]), Math.min(a[1], b[1])];
22
+ }
23
+ export function max(a, b) {
24
+ return [Math.max(a[0], b[0]), Math.max(a[1], b[1])];
25
+ }
26
+ /**
27
+ * symmetric round the components of a vec2
28
+ */
29
+ export function round(a) {
30
+ return [Common.round(a[0]), Common.round(a[1])];
31
+ }
32
+ export function scale(a, s) {
33
+ return [a[0] * s, a[1] * s];
34
+ }
35
+ /**
36
+ * Adds two vec2's after scaling the second operand by a scalar value
37
+ */
38
+ export function scaleAndAdd(a, b, scale) {
39
+ return [a[0] + b[0] * scale, a[1] + b[1] * scale];
40
+ }
41
+ export function distance(a, b) {
42
+ const x = b[0] - a[0], y = b[1] - a[1];
43
+ return Math.sqrt(x * x + y * y);
44
+ }
45
+ export function squaredDistance(a, b) {
46
+ const x = b[0] - a[0], y = b[1] - a[1];
47
+ return x * x + y * y;
48
+ }
49
+ export function length(v) {
50
+ return Math.sqrt(v[0] ** 2 + v[1] ** 2);
51
+ }
52
+ export function squaredLength(v) {
53
+ return v[0] ** 2 + v[1] ** 2;
54
+ }
55
+ export function negate(v) {
56
+ return [-v[0], -v[1]];
57
+ }
58
+ export function inverse(v) {
59
+ return [1 / v[0], 1 / v[1]];
60
+ }
61
+ export function normalize(v) {
62
+ const hyp = v[0] ** 2 + v[1] ** 2;
63
+ const len = hyp === 0 ? 0 : 1 / Math.sqrt(hyp);
64
+ return [v[0] * len, v[1] * len];
65
+ }
66
+ export function dot(a, b) {
67
+ return a[0] * b[0] + a[1] * b[1];
68
+ }
69
+ export function cross(a, b) {
70
+ const z = a[0] * b[1] - a[1] * b[0];
71
+ return [0, 0, z];
72
+ }
73
+ /**
74
+ * Performs a linear interpolation between two Vec2's
75
+ */
76
+ export function lerp(a, b, t) {
77
+ const [ax, ay] = a;
78
+ return [ax + t * (b[0] - ax), ay + t * (b[1] - ay)];
79
+ }
80
+ export function transformMat2(a, m) {
81
+ const [x, y] = a;
82
+ return [m[0] * x + m[2] * y, m[1] * x + m[3] * y];
83
+ }
84
+ export function transformMat2d(a, m) {
85
+ const [x, y] = a;
86
+ return [m[0] * x + m[2] * y + m[4], m[1] * x + m[3] * y + m[5]];
87
+ }
88
+ /**
89
+ * Transforms the vec2 with a mat3
90
+ * 3rd vector component is implicitly '1'
91
+ */
92
+ export function transformMat3(a, m) {
93
+ const [x, y] = a;
94
+ return [m[0] * x + m[3] * y + m[6], m[1] * x + m[4] * y + m[7]];
95
+ }
96
+ /**
97
+ * Rotate a 2D vector
98
+ */
99
+ export function rotate(a, origin, rad) {
100
+ // Translate point to the origin
101
+ const p0 = a[0] - origin[0], p1 = a[1] - origin[1], sinC = Math.sin(rad), cosC = Math.cos(rad);
102
+ // Perform rotation and translate to correct position
103
+ return [p0 * cosC - p1 * sinC + origin[0], p0 * sinC + p1 * cosC + origin[1]];
104
+ }
105
+ /**
106
+ * Get the angle between two 2D vectors
107
+ */
108
+ export function angle(a, b) {
109
+ const [x1, y1] = a;
110
+ const [x2, y2] = b;
111
+ // mag is the product of the magnitudes of a and b
112
+ const mag = Math.sqrt((x1 * x1 + y1 * y1) * (x2 * x2 + y2 * y2));
113
+ // mag &&.. short circuits if mag == 0
114
+ const cosine = mag && (x1 * x2 + y1 * y2) / mag;
115
+ // Math.min(Math.max(cosine, -1), 1) clamps the cosine between -1 and 1
116
+ return Math.acos(Math.min(Math.max(cosine, -1), 1));
117
+ }
118
+ /**
119
+ * Returns whether or not the vectors exactly have the same elements in the same position (when compared with ===)
120
+ */
121
+ export function exactEquals(a, b) {
122
+ return a[0] === b[0] && a[1] === b[1];
123
+ }
124
+ /**
125
+ * Returns whether or not the vectors have approximately the same elements in the same position.
126
+ */
127
+ export function equals(a, b) {
128
+ const [a0, a1] = a;
129
+ const [b0, b1] = b;
130
+ return (Math.abs(a0 - b0) <=
131
+ Common.EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) &&
132
+ Math.abs(a1 - b1) <=
133
+ Common.EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)));
134
+ }
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVjMi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZWMyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE1BQU0sVUFBVSxDQUFBO0FBUWxDLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBTyxFQUFFLENBQU87SUFDbkMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ2xDLENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUFDLENBQU8sRUFBRSxDQUFPO0lBQ3hDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNsQyxDQUFDO0FBRUQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxDQUFPLEVBQUUsQ0FBTztJQUN4QyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDbEMsQ0FBQztBQUVELE1BQU0sVUFBVSxNQUFNLENBQUMsQ0FBTyxFQUFFLENBQU87SUFDdEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ2xDLENBQUM7QUFFRCxNQUFNLFVBQVUsSUFBSSxDQUFDLENBQU87SUFDM0IsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQzFDLENBQUM7QUFFRCxNQUFNLFVBQVUsS0FBSyxDQUFDLENBQU87SUFDNUIsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQzVDLENBQUM7QUFFRCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQU8sRUFBRSxDQUFPO0lBQ25DLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ3BELENBQUM7QUFFRCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQU8sRUFBRSxDQUFPO0lBQ25DLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ3BELENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxLQUFLLENBQUMsQ0FBTztJQUM1QixPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDaEQsQ0FBQztBQUVELE1BQU0sVUFBVSxLQUFLLENBQUMsQ0FBTyxFQUFFLENBQVM7SUFDdkMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO0FBQzVCLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsQ0FBTyxFQUFFLENBQU8sRUFBRSxLQUFhO0lBQzFELE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFBO0FBQ2xELENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUFDLENBQU8sRUFBRSxDQUFPO0lBQ3hDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3BCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2hCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtBQUNoQyxDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWUsQ0FBQyxDQUFPLEVBQUUsQ0FBTztJQUMvQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNwQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNoQixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUNyQixDQUFDO0FBRUQsTUFBTSxVQUFVLE1BQU0sQ0FBQyxDQUFPO0lBQzdCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtBQUN4QyxDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxDQUFPO0lBQ3BDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQzdCLENBQUM7QUFFRCxNQUFNLFVBQVUsTUFBTSxDQUFDLENBQU87SUFDN0IsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDdEIsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUMsQ0FBTztJQUM5QixPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDNUIsQ0FBQztBQUVELE1BQU0sVUFBVSxTQUFTLENBQUMsQ0FBTztJQUNoQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUM5QyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUE7QUFDaEMsQ0FBQztBQUVELE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBTyxFQUFFLENBQU87SUFDbkMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDakMsQ0FBQztBQUVELE1BQU0sVUFBVSxLQUFLLENBQUMsQ0FBTyxFQUFFLENBQU87SUFDckMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ25DLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0FBQ2pCLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxJQUFJLENBQUMsQ0FBTyxFQUFFLENBQU8sRUFBRSxDQUFTO0lBQy9DLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2xCLE9BQU8sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUNwRCxDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxDQUFPLEVBQUUsQ0FBTztJQUM3QyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNoQixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO0FBQ2xELENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLENBQU8sRUFBRSxDQUFRO0lBQy9DLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2hCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNoRSxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxDQUFPLEVBQUUsQ0FBTztJQUM3QyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNoQixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDaEUsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FBQyxDQUFPLEVBQUUsTUFBWSxFQUFFLEdBQVc7SUFDeEQsZ0NBQWdDO0lBQ2hDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQzFCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNyQixJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFDcEIsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7SUFFckIscURBQXFEO0lBQ3JELE9BQU8sQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUM5RSxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsS0FBSyxDQUFDLENBQU8sRUFBRSxDQUFPO0lBQ3JDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2xCLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2xCLGtEQUFrRDtJQUNsRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ2hFLHNDQUFzQztJQUN0QyxNQUFNLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUE7SUFDL0MsdUVBQXVFO0lBQ3ZFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNwRCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLENBQU8sRUFBRSxDQUFPO0lBQzNDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ3RDLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQUMsQ0FBTyxFQUFFLENBQU87SUFDdEMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDbEIsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDbEIsT0FBTyxDQUNOLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDekQsQ0FBQTtBQUNGLENBQUMifQ==
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,105 @@
1
+ import { EPSILON } from './common';
2
+ import * as vec2 from './vec2';
3
+ function areVec2Equal(a, b) {
4
+ if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) {
5
+ return undefined;
6
+ }
7
+ for (let i = 0; i < a.length; i++) {
8
+ const nearlyEqual = Math.abs(a[i] - b[i]) <=
9
+ EPSILON * Math.max(1, Math.abs(a[i]), Math.abs(b[i]));
10
+ if (!nearlyEqual) {
11
+ return undefined;
12
+ }
13
+ }
14
+ return true;
15
+ }
16
+ ;
17
+ expect.addEqualityTesters([areVec2Equal]);
18
+ // https://github.com/stackgl/gl-vec2/blob/master/test/index.js
19
+ test('add', () => {
20
+ expect(vec2.add([0, 1], [2, 3])).toStrictEqual([2, 4]);
21
+ });
22
+ test('ceil', () => {
23
+ expect(vec2.ceil([5.2, 6.5])).toStrictEqual([6, 7]);
24
+ });
25
+ test('cross', () => {
26
+ expect(vec2.cross([3, 4], [5, 6])).toStrictEqual([0, 0, -2]);
27
+ });
28
+ test('distance', () => {
29
+ expect(vec2.distance([1, 2], [4, 6])).toEqual(5);
30
+ });
31
+ test('divide', () => {
32
+ expect(vec2.divide([8, 4], [2, 1])).toEqual([4, 4]);
33
+ });
34
+ test('dot', () => {
35
+ expect(vec2.dot([3, 4], [5, 6])).toEqual(39);
36
+ });
37
+ test('equals', () => {
38
+ expect(vec2.equals([3 + EPSILON, 5 - EPSILON], [3, 5])).toBe(true);
39
+ expect(vec2.equals([3 + EPSILON * 10, 5 - EPSILON], [3, 5])).toBe(false);
40
+ expect(vec2.equals([3 + EPSILON, 5 - EPSILON * 10], [3, 5])).toBe(false);
41
+ });
42
+ test('exactEquals', () => {
43
+ expect(vec2.exactEquals([3, 5], [3, 5])).toBe(true);
44
+ expect(vec2.exactEquals([3 + EPSILON, 5], [3, 5])).toBe(false);
45
+ expect(vec2.exactEquals([3, 5 - EPSILON], [3, 5])).toBe(false);
46
+ });
47
+ test('floor', () => {
48
+ expect(vec2.floor([5.2, 6.6])).toEqual([5, 6]);
49
+ });
50
+ test('inverse', () => {
51
+ expect(vec2.inverse([2, 4])).toEqual([0.5, 0.25]);
52
+ });
53
+ test('length', () => {
54
+ expect(vec2.length([3, 4])).toEqual(5);
55
+ });
56
+ test('lerp', () => {
57
+ expect(vec2.lerp([3, 4], [5, 6], 0.25)).toEqual([3.5, 4.5]);
58
+ });
59
+ test('max', () => {
60
+ expect(vec2.max([3, 7], [5, 6])).toEqual([5, 7]);
61
+ });
62
+ test('min', () => {
63
+ expect(vec2.min([3, 7], [5, 6])).toEqual([3, 6]);
64
+ });
65
+ test('multiply', () => {
66
+ expect(vec2.multiply([3, 4], [5, 6])).toEqual([15, 24]);
67
+ });
68
+ test('negate', () => {
69
+ expect(vec2.negate([3, 4])).toEqual([-3, -4]);
70
+ });
71
+ test('normalize', () => {
72
+ expect(vec2.normalize([3, 4])).toEqual([3 / 5, 4 / 5]);
73
+ expect(vec2.normalize([0, 0])).toEqual([0, 0]);
74
+ });
75
+ test('rotate', () => {
76
+ expect(vec2.rotate([1, 2], [0, 0], Math.PI)).toEqual([-1, -2]);
77
+ });
78
+ test('round', () => {
79
+ expect(vec2.round([5.2, 6.6])).toEqual([5, 7]);
80
+ });
81
+ test('scale', () => {
82
+ expect(vec2.scale([3, 4], 2)).toEqual([6, 8]);
83
+ });
84
+ test('scaleAndAdd', () => {
85
+ expect(vec2.scaleAndAdd([3, 4], [5, 6], 2)).toEqual([13, 16]);
86
+ });
87
+ test('squaredDistance', () => {
88
+ expect(vec2.squaredDistance([3, 4], [5, 6])).toEqual(8);
89
+ });
90
+ test('squaredLength', () => {
91
+ expect(vec2.squaredLength([3, 4])).toEqual(25);
92
+ });
93
+ test('subtract', () => {
94
+ expect(vec2.subtract([3, 4], [5, 6])).toEqual([-2, -2]);
95
+ });
96
+ test('transformMat2', () => {
97
+ expect(vec2.transformMat2([3, 4], [5, 6, 7, 8])).toEqual([43, 50]);
98
+ });
99
+ test('transformMat2d', () => {
100
+ expect(vec2.transformMat2d([3, 4], [5, 6, 7, 8, 9, 10])).toEqual([52, 60]);
101
+ });
102
+ test('transformMat3', () => {
103
+ expect(vec2.transformMat3([3, 4], [5, 6, 0, 8, 9, 0, 11, 12, 0])).toStrictEqual([58, 66]);
104
+ });
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVjMi50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3ZlYzIudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sVUFBVSxDQUFBO0FBQ2hDLE9BQU8sS0FBSyxJQUFJLE1BQU0sUUFBUSxDQUFBO0FBRTlCLFNBQVMsWUFBWSxDQUFDLENBQVUsRUFBRSxDQUFVO0lBQzNDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUU7UUFDcEUsT0FBTyxTQUFTLENBQUE7S0FDaEI7SUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNsQyxNQUFNLFdBQVcsR0FDaEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUV0RCxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2pCLE9BQU8sU0FBUyxDQUFBO1NBQ2hCO0tBQ0Q7SUFDRCxPQUFPLElBQUksQ0FBQTtBQUNaLENBQUM7QUFFRCxDQUFDO0FBQUMsTUFBYyxDQUFDLGtCQUFrQixDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQTtBQUVuRCwrREFBK0Q7QUFFL0QsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUU7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QyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNuRCxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM5RCxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUMvRCxDQUFDLENBQUMsQ0FBQTtBQUVGLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO0lBQ2xCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUMvQyxDQUFDLENBQUMsQ0FBQTtBQUVGLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO0lBQ3BCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQTtBQUNsRCxDQUFDLENBQUMsQ0FBQTtBQUVGLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO0lBQ25CLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDdkMsQ0FBQyxDQUFDLENBQUE7QUFFRixJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtJQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFBO0FBQzVELENBQUMsQ0FBQyxDQUFBO0FBRUYsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUU7SUFDaEIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ2pELENBQUMsQ0FBQyxDQUFBO0FBRUYsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUU7SUFDaEIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ2pELENBQUMsQ0FBQyxDQUFBO0FBRUYsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUU7SUFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFBO0FBQ3hELENBQUMsQ0FBQyxDQUFBO0FBRUYsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7SUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUM5QyxDQUFDLENBQUMsQ0FBQTtBQUVGLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFO0lBQ3RCLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3RELE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUMvQyxDQUFDLENBQUMsQ0FBQTtBQUVGLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO0lBQ25CLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUMvRCxDQUFDLENBQUMsQ0FBQTtBQUVGLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO0lBQ2xCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUMvQyxDQUFDLENBQUMsQ0FBQTtBQUVGLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO0lBQ2xCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxF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
package/lib/vec3.d.ts ADDED
@@ -0,0 +1,159 @@
1
+ export type Vec3 = readonly [number, number, number];
2
+ import { Mat3 } from './mat3';
3
+ import { Mat4 } from './mat4';
4
+ import { Quat } from './quat';
5
+ /**
6
+ * Adds two vec3's
7
+ */
8
+ export declare function add(a: Vec3, b: Vec3): Vec3;
9
+ /**
10
+ * Subtracts vector b from vector a
11
+ */
12
+ export declare function subtract(a: Vec3, b: Vec3): Vec3;
13
+ /**
14
+ * Multiplies two vec3's
15
+ */
16
+ export declare function multiply(a: Vec3, b: Vec3): Vec3;
17
+ /**
18
+ * Divides two vec3's
19
+ */
20
+ export declare function divide(a: Vec3, b: Vec3): Vec3;
21
+ /**
22
+ * Math.ceil the components of a vec3
23
+ */
24
+ export declare function ceil(a: Vec3): Vec3;
25
+ /**
26
+ * Math.floor the components of a vec3
27
+ */
28
+ export declare function floor(a: Vec3): Vec3;
29
+ /**
30
+ * Returns the minimum of two vec3's
31
+ */
32
+ export declare function min(a: Vec3, b: Vec3): Vec3;
33
+ /**
34
+ * Returns the maximum of two vec3's
35
+ */
36
+ export declare function max(a: Vec3, b: Vec3): Vec3;
37
+ /**
38
+ * symmetric round the components of a vec3
39
+ */
40
+ export declare function round(a: Vec3): Vec3;
41
+ /**
42
+ * Scales a vec3 by a scalar number
43
+ */
44
+ export declare function scale(a: Vec3, s: number): Vec3;
45
+ /**
46
+ * Adds two vec3's after scaling the second operand by a scalar value
47
+ */
48
+ export declare function scaleAndAdd(a: Vec3, b: Vec3, scale: number): Vec3;
49
+ /**
50
+ * Calculates the euclidian distance between two vec3's
51
+ */
52
+ export declare function distance(a: Vec3, b: Vec3): number;
53
+ /**
54
+ * Calculates the squared euclidian distance between two vec3's
55
+ */
56
+ export declare function squaredDistance(a: Vec3, b: Vec3): number;
57
+ /**
58
+ * Calculates the length of a vec3
59
+ */
60
+ export declare function length(a: Vec3): number;
61
+ /**
62
+ * Calculates the squared length of a vec3
63
+ */
64
+ export declare function squaredLength(a: Vec3): number;
65
+ /**
66
+ * Negates the components of a vec3
67
+ */
68
+ export declare function negate(a: Vec3): Vec3;
69
+ /**
70
+ * Returns the inverse of the components of a vec3
71
+ */
72
+ export declare function inverse(a: Vec3): Vec3;
73
+ /**
74
+ * Normalize a vec3
75
+ */
76
+ export declare function normalize(a: Vec3): Vec3;
77
+ /**
78
+ * Calculates the dot product of two vec3's
79
+ */
80
+ export declare function dot(a: Vec3, b: Vec3): number;
81
+ /**
82
+ * Computes the cross product of two vec3's
83
+ */
84
+ export declare function cross(a: Vec3, b: Vec3): Vec3;
85
+ /**
86
+ * Performs a linear interpolation between two vec3's
87
+ */
88
+ export declare function lerp(a: Vec3, b: Vec3, t: number): Vec3;
89
+ /**
90
+ * Performs a spherical linear interpolation between two vec3's
91
+ */
92
+ export declare function slerp(a: Vec3, b: Vec3, t: number): Vec3;
93
+ /**
94
+ * Performs a hermite interpolation with two control points
95
+ *
96
+ * @param a the first operand
97
+ * @param b the second operand
98
+ * @param c the third operand
99
+ * @param d the fourth operand
100
+ * @param t interpolation amount, in the range [0-1], between the two inputs
101
+ */
102
+ export declare function hermite(a: Vec3, b: Vec3, c: Vec3, d: Vec3, t: number): Vec3;
103
+ /**
104
+ * Performs a bezier interpolation with two control points
105
+ */
106
+ export declare function bezier(a: Vec3, b: Vec3, c: Vec3, d: Vec3, t: number): Vec3;
107
+ /**
108
+ * Transforms the vec3 with a mat4.
109
+ * 4th vector component is implicitly '1'
110
+ */
111
+ export declare function transformMat4(a: Vec3, m: Mat4): Vec3;
112
+ /**
113
+ * Transforms the vec3 with a mat3.
114
+ */
115
+ export declare function transformMat3(a: Vec3, m: Mat3): Vec3;
116
+ /**
117
+ * Transforms the vec3 with a quat
118
+ * Can also be used for dual quaternions. (Multiply it with the real part)
119
+ *
120
+ * @param a the vector to transform
121
+ * @param q quaternion to transform with
122
+ */
123
+ export declare function transformQuat(a: Vec3, q: Quat): Vec3;
124
+ /**
125
+ * Rotate a 3D vector around the x-axis
126
+ * @param a The vec3 point to rotate
127
+ * @param b The origin of the rotation
128
+ * @param rad The angle of rotation in radians
129
+ */
130
+ export declare function rotateX(a: Vec3, b: Vec3, rad: number): Vec3;
131
+ /**
132
+ * Rotate a 3D vector around the y-axis
133
+ * @param a The vec3 point to rotate
134
+ * @param origin The origin of the rotation
135
+ * @param rad The angle of rotation in radians
136
+ */
137
+ export declare function rotateY(a: Vec3, origin: Vec3, rad: number): Vec3;
138
+ /**
139
+ * Rotate a 3D vector around the z-axis
140
+ * @param a The vec3 point to rotate
141
+ * @param b The origin of the rotation
142
+ * @param rad The angle of rotation in radians
143
+ */
144
+ export declare function rotateZ(a: Vec3, b: Vec3, rad: number): Vec3;
145
+ /**
146
+ * Get the angle between two 3D vectors
147
+ * @param a The first operand
148
+ * @param b The second operand
149
+ * @returns The angle in radians
150
+ */
151
+ export declare function angle(a: Vec3, b: Vec3): number;
152
+ /**
153
+ * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)
154
+ */
155
+ export declare function exactEquals(a: Vec3, b: Vec3): boolean;
156
+ /**
157
+ * Returns whether or not the vectors have approximately the same elements in the same position.
158
+ */
159
+ export declare function equals(a: Vec3, b: Vec3): boolean;