@math.gl/core 3.5.6 → 3.6.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.
- package/dist/classes/base/math-array.d.ts +66 -0
- package/dist/classes/base/math-array.d.ts.map +1 -0
- package/dist/classes/base/math-array.js +216 -0
- package/dist/classes/base/matrix.d.ts +14 -0
- package/dist/classes/base/matrix.d.ts.map +1 -0
- package/dist/classes/base/matrix.js +61 -0
- package/dist/classes/base/vector.d.ts +44 -0
- package/dist/classes/base/vector.d.ts.map +1 -0
- package/dist/classes/base/vector.js +126 -0
- package/dist/classes/euler.d.ts +77 -0
- package/dist/classes/euler.d.ts.map +1 -0
- package/dist/classes/euler.js +485 -0
- package/dist/classes/matrix3.d.ts +60 -0
- package/dist/classes/matrix3.d.ts.map +1 -0
- package/dist/classes/matrix3.js +201 -0
- package/dist/classes/matrix4.d.ts +226 -0
- package/dist/classes/matrix4.d.ts.map +1 -0
- package/dist/classes/matrix4.js +538 -0
- package/dist/classes/pose.d.ts +40 -0
- package/dist/classes/pose.d.ts.map +1 -0
- package/dist/classes/pose.js +109 -0
- package/dist/classes/quaternion.d.ts +63 -0
- package/dist/classes/quaternion.d.ts.map +1 -0
- package/dist/classes/quaternion.js +262 -0
- package/dist/classes/spherical-coordinates.d.ts +60 -0
- package/dist/classes/spherical-coordinates.d.ts.map +1 -0
- package/dist/classes/spherical-coordinates.js +148 -0
- package/dist/classes/vector2.d.ts +55 -0
- package/dist/classes/vector2.d.ts.map +1 -0
- package/dist/classes/vector2.js +111 -0
- package/dist/classes/vector3.d.ts +56 -0
- package/dist/classes/vector3.d.ts.map +1 -0
- package/dist/classes/vector3.js +133 -0
- package/dist/classes/vector4.d.ts +41 -0
- package/dist/classes/vector4.d.ts.map +1 -0
- package/dist/classes/vector4.js +114 -0
- package/dist/es5/classes/base/math-array.js +57 -61
- package/dist/es5/classes/base/math-array.js.map +1 -1
- package/dist/es5/classes/base/matrix.js +0 -14
- package/dist/es5/classes/base/matrix.js.map +1 -1
- package/dist/es5/classes/base/vector.js +0 -12
- package/dist/es5/classes/base/vector.js.map +1 -1
- package/dist/es5/classes/euler.js +63 -49
- package/dist/es5/classes/euler.js.map +1 -1
- package/dist/es5/classes/matrix3.js +60 -33
- package/dist/es5/classes/matrix3.js.map +1 -1
- package/dist/es5/classes/matrix4.js +167 -164
- package/dist/es5/classes/matrix4.js.map +1 -1
- package/dist/es5/classes/pose.js +7 -6
- package/dist/es5/classes/pose.js.map +1 -1
- package/dist/es5/classes/quaternion.js +44 -36
- package/dist/es5/classes/quaternion.js.map +1 -1
- package/dist/es5/classes/spherical-coordinates.js +12 -8
- package/dist/es5/classes/spherical-coordinates.js.map +1 -1
- package/dist/es5/classes/vector2.js.map +1 -1
- package/dist/es5/classes/vector3.js +7 -2
- package/dist/es5/classes/vector3.js.map +1 -1
- package/dist/es5/classes/vector4.js +7 -2
- package/dist/es5/classes/vector4.js.map +1 -1
- package/dist/es5/docs/README.md +0 -0
- package/dist/es5/index.js +71 -89
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lib/assert.js.map +1 -1
- package/dist/es5/lib/common.js +40 -43
- package/dist/es5/lib/common.js.map +1 -1
- package/dist/es5/lib/gl-matrix-extras.js.map +1 -1
- package/dist/es5/lib/gl-matrix.d.js +2 -0
- package/dist/es5/lib/gl-matrix.d.js.map +1 -0
- package/dist/es5/lib/math-utils.js.map +1 -1
- package/dist/es5/lib/validators.js.map +1 -1
- package/dist/esm/classes/base/math-array.js +45 -47
- package/dist/esm/classes/base/math-array.js.map +1 -1
- package/dist/esm/classes/base/matrix.js +0 -11
- package/dist/esm/classes/base/matrix.js.map +1 -1
- package/dist/esm/classes/base/vector.js +0 -10
- package/dist/esm/classes/base/vector.js.map +1 -1
- package/dist/esm/classes/euler.js +61 -48
- package/dist/esm/classes/euler.js.map +1 -1
- package/dist/esm/classes/matrix3.js +55 -33
- package/dist/esm/classes/matrix3.js.map +1 -1
- package/dist/esm/classes/matrix4.js +156 -136
- package/dist/esm/classes/matrix4.js.map +1 -1
- package/dist/esm/classes/pose.js +8 -4
- package/dist/esm/classes/pose.js.map +1 -1
- package/dist/esm/classes/quaternion.js +37 -27
- package/dist/esm/classes/quaternion.js.map +1 -1
- package/dist/esm/classes/spherical-coordinates.js +15 -5
- package/dist/esm/classes/spherical-coordinates.js.map +1 -1
- package/dist/esm/classes/vector2.js.map +1 -1
- package/dist/esm/classes/vector3.js +7 -2
- package/dist/esm/classes/vector3.js.map +1 -1
- package/dist/esm/classes/vector4.js +7 -2
- package/dist/esm/classes/vector4.js.map +1 -1
- package/dist/esm/docs/README.md +0 -0
- package/dist/esm/index.js +2 -13
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/assert.js.map +1 -1
- package/dist/esm/lib/common.js +41 -44
- package/dist/esm/lib/common.js.map +1 -1
- package/dist/esm/lib/gl-matrix-extras.js.map +1 -1
- package/dist/esm/lib/gl-matrix.d.js +2 -0
- package/dist/esm/lib/gl-matrix.d.js.map +1 -0
- package/dist/esm/lib/math-utils.js.map +1 -1
- package/dist/esm/lib/validators.js.map +1 -1
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/lib/assert.d.ts +2 -0
- package/dist/lib/assert.d.ts.map +1 -0
- package/dist/lib/assert.js +5 -0
- package/dist/lib/common.d.ts +93 -0
- package/dist/lib/common.d.ts.map +1 -0
- package/dist/lib/common.js +210 -0
- package/dist/lib/gl-matrix-extras.d.ts +7 -0
- package/dist/lib/gl-matrix-extras.d.ts.map +1 -0
- package/dist/lib/gl-matrix-extras.js +49 -0
- package/dist/lib/math-utils.d.ts +28 -0
- package/dist/lib/math-utils.d.ts.map +1 -0
- package/dist/lib/math-utils.js +28 -0
- package/dist/lib/validators.d.ts +6 -0
- package/dist/lib/validators.d.ts.map +1 -0
- package/dist/lib/validators.js +33 -0
- package/package.json +5 -4
- package/src/classes/base/math-array.ts +265 -0
- package/src/classes/base/{matrix.js → matrix.ts} +15 -19
- package/src/classes/base/{vector.js → vector.ts} +47 -54
- package/src/classes/{euler.js → euler.ts} +121 -221
- package/src/classes/matrix3.ts +253 -0
- package/src/classes/matrix4.ts +668 -0
- package/src/classes/{pose.js → pose.ts} +52 -49
- package/src/classes/{quaternion.js → quaternion.ts} +107 -95
- package/src/classes/{spherical-coordinates.js → spherical-coordinates.ts} +84 -54
- package/src/classes/vector2.ts +127 -0
- package/src/classes/{vector3.js → vector3.ts} +43 -55
- package/src/classes/{vector4.js → vector4.ts} +44 -48
- package/src/docs/README.md +0 -0
- package/{dist/esm/index.d.ts → src/index.ts} +32 -34
- package/src/lib/{assert.js → assert.ts} +1 -1
- package/src/lib/common.ts +304 -0
- package/src/lib/{gl-matrix-extras.js → gl-matrix-extras.ts} +26 -5
- package/src/lib/gl-matrix.d.ts +266 -0
- package/src/lib/{math-utils.js → math-utils.ts} +0 -0
- package/src/lib/{validators.js → validators.ts} +10 -6
- package/dist/es5/addons/polygon.d.ts +0 -17
- package/dist/es5/classes/base/math-array.d.ts +0 -56
- package/dist/es5/classes/base/matrix.d.ts +0 -15
- package/dist/es5/classes/base/vector.d.ts +0 -45
- package/dist/es5/classes/euler.d.ts +0 -92
- package/dist/es5/classes/matrix3.d.ts +0 -91
- package/dist/es5/classes/matrix4.d.ts +0 -161
- package/dist/es5/classes/pose.d.ts +0 -92
- package/dist/es5/classes/quaternion.d.ts +0 -107
- package/dist/es5/classes/spherical-coordinates.d.ts +0 -87
- package/dist/es5/classes/vector2.d.ts +0 -65
- package/dist/es5/classes/vector3.d.ts +0 -65
- package/dist/es5/classes/vector4.d.ts +0 -34
- package/dist/es5/index.d.ts +0 -54
- package/dist/es5/lib/common.d.ts +0 -80
- package/dist/esm/addons/polygon.d.ts +0 -17
- package/dist/esm/classes/base/math-array.d.ts +0 -56
- package/dist/esm/classes/base/matrix.d.ts +0 -15
- package/dist/esm/classes/base/vector.d.ts +0 -45
- package/dist/esm/classes/euler.d.ts +0 -92
- package/dist/esm/classes/matrix3.d.ts +0 -91
- package/dist/esm/classes/matrix4.d.ts +0 -161
- package/dist/esm/classes/pose.d.ts +0 -92
- package/dist/esm/classes/quaternion.d.ts +0 -107
- package/dist/esm/classes/spherical-coordinates.d.ts +0 -87
- package/dist/esm/classes/vector2.d.ts +0 -65
- package/dist/esm/classes/vector3.d.ts +0 -65
- package/dist/esm/classes/vector4.d.ts +0 -34
- package/dist/esm/lib/common.d.ts +0 -80
- package/src/addons/polygon.d.ts +0 -17
- package/src/classes/base/math-array.d.ts +0 -56
- package/src/classes/base/math-array.js +0 -250
- package/src/classes/base/matrix.d.ts +0 -15
- package/src/classes/base/vector.d.ts +0 -45
- package/src/classes/euler.d.ts +0 -92
- package/src/classes/matrix3.d.ts +0 -91
- package/src/classes/matrix3.js +0 -225
- package/src/classes/matrix4.d.ts +0 -161
- package/src/classes/matrix4.js +0 -530
- package/src/classes/pose.d.ts +0 -92
- package/src/classes/quaternion.d.ts +0 -107
- package/src/classes/spherical-coordinates.d.ts +0 -87
- package/src/classes/vector2.d.ts +0 -65
- package/src/classes/vector2.js +0 -122
- package/src/classes/vector3.d.ts +0 -65
- package/src/classes/vector4.d.ts +0 -34
- package/src/index.d.ts +0 -54
- package/src/index.js +0 -86
- package/src/lib/common.d.ts +0 -80
- package/src/lib/common.js +0 -222
|
@@ -1,101 +1,61 @@
|
|
|
1
1
|
// Copyright (c) 2017 Uber Technologies, Inc.
|
|
2
|
-
//
|
|
3
|
-
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
4
|
-
// of this software and associated documentation files (the "Software"), to deal
|
|
5
|
-
// in the Software without restriction, including without limitation the rights
|
|
6
|
-
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
7
|
-
// copies of the Software, and to permit persons to whom the Software is
|
|
8
|
-
// furnished to do so, subject to the following conditions:
|
|
9
|
-
//
|
|
10
|
-
// The above copyright notice and this permission notice shall be included in
|
|
11
|
-
// all copies or substantial portions of the Software.
|
|
12
|
-
//
|
|
13
|
-
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
14
|
-
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
15
|
-
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
16
|
-
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
17
|
-
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
18
|
-
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
19
|
-
// THE SOFTWARE.
|
|
20
|
-
|
|
2
|
+
// MIT License
|
|
21
3
|
import MathArray from './base/math-array';
|
|
4
|
+
import Quaternion from './quaternion';
|
|
5
|
+
import {NumericArray} from '@math.gl/types';
|
|
6
|
+
|
|
22
7
|
import {clamp} from '../lib/common';
|
|
23
8
|
import {checkNumber} from '../lib/validators';
|
|
24
|
-
import Quaternion from './quaternion';
|
|
25
9
|
|
|
26
10
|
// Internal constants
|
|
27
11
|
const ERR_UNKNOWN_ORDER = 'Unknown Euler angle order';
|
|
28
12
|
const ALMOST_ONE = 0.99999;
|
|
29
13
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
38
|
-
return value;
|
|
14
|
+
enum RotationOrder {
|
|
15
|
+
ZYX = 0,
|
|
16
|
+
YXZ = 1,
|
|
17
|
+
XZY = 2,
|
|
18
|
+
ZXY = 3,
|
|
19
|
+
YZX = 4,
|
|
20
|
+
XYZ = 5
|
|
39
21
|
}
|
|
40
22
|
|
|
41
23
|
export default class Euler extends MathArray {
|
|
42
|
-
// static XYZ = 0;
|
|
43
|
-
// static YZX = 1;
|
|
44
|
-
// static ZXY = 2;
|
|
45
|
-
// static XZY = 3;
|
|
46
|
-
// static YXZ = 4;
|
|
47
|
-
// static ZYX = 5;
|
|
48
|
-
// static RollPitchYaw = 0;
|
|
49
|
-
// static DefaultOrder = 0;
|
|
50
|
-
|
|
51
24
|
// Constants
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
return 0;
|
|
25
|
+
static get ZYX(): RotationOrder {
|
|
26
|
+
return RotationOrder.ZYX;
|
|
55
27
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
return 1;
|
|
28
|
+
static get YXZ(): RotationOrder {
|
|
29
|
+
return RotationOrder.YXZ;
|
|
59
30
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
return 2;
|
|
31
|
+
static get XZY(): RotationOrder {
|
|
32
|
+
return RotationOrder.XZY;
|
|
63
33
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
return 3;
|
|
34
|
+
static get ZXY(): RotationOrder {
|
|
35
|
+
return RotationOrder.ZXY;
|
|
67
36
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
return 4;
|
|
37
|
+
static get YZX(): RotationOrder {
|
|
38
|
+
return RotationOrder.YZX;
|
|
71
39
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
return 5;
|
|
40
|
+
static get XYZ(): RotationOrder {
|
|
41
|
+
return RotationOrder.XYZ;
|
|
75
42
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
return 0;
|
|
43
|
+
static get RollPitchYaw(): RotationOrder {
|
|
44
|
+
return RotationOrder.ZYX;
|
|
79
45
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
return Euler.ZYX;
|
|
46
|
+
static get DefaultOrder(): RotationOrder {
|
|
47
|
+
return RotationOrder.ZYX;
|
|
83
48
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
return ['ZYX', 'YXZ', 'XZY', 'ZXY', 'YZX', 'XYZ'];
|
|
49
|
+
static get RotationOrders(): typeof RotationOrder {
|
|
50
|
+
return RotationOrder;
|
|
87
51
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
return Euler.RotationOrders[order];
|
|
52
|
+
static rotationOrder(order: RotationOrder): string {
|
|
53
|
+
return RotationOrder[order];
|
|
91
54
|
}
|
|
92
|
-
|
|
93
|
-
get ELEMENTS() {
|
|
55
|
+
get ELEMENTS(): number {
|
|
94
56
|
return 4;
|
|
95
57
|
}
|
|
96
58
|
|
|
97
|
-
/* eslint-enable no-multi-spaces, brace-style, no-return-assign */
|
|
98
|
-
|
|
99
59
|
/**
|
|
100
60
|
* @class
|
|
101
61
|
* @param {Number | Number[]} x
|
|
@@ -109,49 +69,51 @@ export default class Euler extends MathArray {
|
|
|
109
69
|
// eslint-disable-next-line prefer-rest-params
|
|
110
70
|
if (arguments.length > 0 && Array.isArray(arguments[0])) {
|
|
111
71
|
// eslint-disable-next-line prefer-rest-params
|
|
72
|
+
// @ts-expect-error
|
|
112
73
|
this.fromVector3(...arguments);
|
|
113
74
|
} else {
|
|
114
|
-
// @ts-ignore error TS2345: Argument of type 'number | [number, number, number, number]' not assignable to 'number'
|
|
115
75
|
this.set(x, y, z, order);
|
|
116
76
|
}
|
|
117
77
|
}
|
|
118
78
|
|
|
119
|
-
fromQuaternion(quaternion) {
|
|
79
|
+
fromQuaternion(quaternion: Readonly<NumericArray>): this {
|
|
120
80
|
const [x, y, z, w] = quaternion;
|
|
121
81
|
const ysqr = y * y;
|
|
122
|
-
const t0 = -2
|
|
123
|
-
const t1 = +2
|
|
124
|
-
let t2 = -2
|
|
125
|
-
const t3 = +2
|
|
126
|
-
const t4 = -2
|
|
127
|
-
|
|
128
|
-
t2 = t2
|
|
129
|
-
t2 = t2 < -1.0 ? -1.0 : t2;
|
|
130
|
-
|
|
82
|
+
const t0 = -2 * (ysqr + z * z) + 1;
|
|
83
|
+
const t1 = +2 * (x * y + w * z);
|
|
84
|
+
let t2 = -2 * (x * z - w * y);
|
|
85
|
+
const t3 = +2 * (y * z + w * x);
|
|
86
|
+
const t4 = -2 * (x * x + ysqr) + 1;
|
|
87
|
+
t2 = t2 > 1 ? 1 : t2;
|
|
88
|
+
t2 = t2 < -1 ? -1 : t2;
|
|
131
89
|
const roll = Math.atan2(t3, t4);
|
|
132
90
|
const pitch = Math.asin(t2);
|
|
133
91
|
const yaw = Math.atan2(t1, t0);
|
|
92
|
+
return this.set(roll, pitch, yaw, Euler.RollPitchYaw);
|
|
93
|
+
}
|
|
134
94
|
|
|
135
|
-
|
|
95
|
+
fromObject(object: object): this {
|
|
96
|
+
throw new Error('not implemented');
|
|
97
|
+
// return this.set(object.x, object.y, object.z, object.order);
|
|
136
98
|
}
|
|
137
99
|
|
|
138
100
|
// fromQuaternion(q, order) {
|
|
139
101
|
// this._fromRotationMat[-0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0];
|
|
140
102
|
// return this.check();
|
|
141
103
|
// }
|
|
142
|
-
|
|
143
104
|
// If copied array does contain fourth element, preserves currently set order
|
|
144
|
-
copy(array) {
|
|
105
|
+
copy(array: Readonly<NumericArray>): this {
|
|
145
106
|
this[0] = array[0];
|
|
146
107
|
this[1] = array[1];
|
|
147
108
|
this[2] = array[2];
|
|
109
|
+
// @ts-expect-error
|
|
148
110
|
this[3] = Number.isFinite(array[3]) || this.order;
|
|
149
111
|
return this.check();
|
|
150
112
|
}
|
|
151
113
|
|
|
152
114
|
// Sets the three angles, and optionally sets the rotation order
|
|
153
115
|
// If order is not specified, preserves currently set order
|
|
154
|
-
set(x = 0, y = 0, z = 0, order) {
|
|
116
|
+
set(x = 0, y = 0, z = 0, order: RotationOrder): this {
|
|
155
117
|
this[0] = x;
|
|
156
118
|
this[1] = y;
|
|
157
119
|
this[2] = z;
|
|
@@ -159,7 +121,7 @@ export default class Euler extends MathArray {
|
|
|
159
121
|
return this.check();
|
|
160
122
|
}
|
|
161
123
|
|
|
162
|
-
validate() {
|
|
124
|
+
validate(): boolean {
|
|
163
125
|
return (
|
|
164
126
|
validateOrder(this[3]) &&
|
|
165
127
|
Number.isFinite(this[0]) &&
|
|
@@ -169,7 +131,7 @@ export default class Euler extends MathArray {
|
|
|
169
131
|
}
|
|
170
132
|
|
|
171
133
|
// Does not copy the orientation element
|
|
172
|
-
toArray(array = [], offset = 0) {
|
|
134
|
+
toArray(array: NumericArray = [], offset: number = 0): NumericArray {
|
|
173
135
|
array[offset] = this[0];
|
|
174
136
|
array[offset + 1] = this[1];
|
|
175
137
|
array[offset + 2] = this[2];
|
|
@@ -177,7 +139,7 @@ export default class Euler extends MathArray {
|
|
|
177
139
|
}
|
|
178
140
|
|
|
179
141
|
// Copies the orientation element
|
|
180
|
-
toArray4(array = [], offset = 0) {
|
|
142
|
+
toArray4(array: NumericArray = [], offset: number = 0): NumericArray {
|
|
181
143
|
array[offset] = this[0];
|
|
182
144
|
array[offset + 1] = this[1];
|
|
183
145
|
array[offset + 2] = this[2];
|
|
@@ -185,139 +147,116 @@ export default class Euler extends MathArray {
|
|
|
185
147
|
return array;
|
|
186
148
|
}
|
|
187
149
|
|
|
188
|
-
toVector3(result = [-0, -0, -0]) {
|
|
150
|
+
toVector3(result: NumericArray = [-0, -0, -0]): NumericArray {
|
|
189
151
|
result[0] = this[0];
|
|
190
152
|
result[1] = this[1];
|
|
191
153
|
result[2] = this[2];
|
|
192
154
|
return result;
|
|
193
155
|
}
|
|
194
|
-
|
|
195
156
|
/* eslint-disable no-multi-spaces, brace-style, no-return-assign */
|
|
196
|
-
|
|
197
157
|
// x, y, z angle notation (note: only corresponds to axis in XYZ orientation)
|
|
198
|
-
|
|
199
|
-
get x() {
|
|
158
|
+
|
|
159
|
+
get x(): number {
|
|
200
160
|
return this[0];
|
|
201
161
|
}
|
|
202
|
-
|
|
203
|
-
set x(value) {
|
|
162
|
+
set x(value: number) {
|
|
204
163
|
this[0] = checkNumber(value);
|
|
205
164
|
}
|
|
206
165
|
|
|
207
|
-
|
|
208
|
-
get y() {
|
|
166
|
+
get y(): number {
|
|
209
167
|
return this[1];
|
|
210
168
|
}
|
|
211
|
-
|
|
212
|
-
set y(value) {
|
|
169
|
+
set y(value: number) {
|
|
213
170
|
this[1] = checkNumber(value);
|
|
214
171
|
}
|
|
215
172
|
|
|
216
|
-
|
|
217
|
-
get z() {
|
|
173
|
+
get z(): number {
|
|
218
174
|
return this[2];
|
|
219
175
|
}
|
|
220
|
-
|
|
221
|
-
set z(value) {
|
|
176
|
+
set z(value: number) {
|
|
222
177
|
this[2] = checkNumber(value);
|
|
223
178
|
}
|
|
224
|
-
|
|
225
179
|
// alpha, beta, gamma angle notation
|
|
226
|
-
get alpha() {
|
|
180
|
+
get alpha(): number {
|
|
227
181
|
return this[0];
|
|
228
182
|
}
|
|
229
|
-
|
|
230
|
-
set alpha(value) {
|
|
183
|
+
set alpha(value: number) {
|
|
231
184
|
this[0] = checkNumber(value);
|
|
232
185
|
}
|
|
233
186
|
|
|
234
|
-
get beta() {
|
|
187
|
+
get beta(): number {
|
|
235
188
|
return this[1];
|
|
236
189
|
}
|
|
237
|
-
|
|
238
|
-
set beta(value) {
|
|
190
|
+
set beta(value: number) {
|
|
239
191
|
this[1] = checkNumber(value);
|
|
240
192
|
}
|
|
241
193
|
|
|
242
|
-
get gamma() {
|
|
194
|
+
get gamma(): number {
|
|
243
195
|
return this[2];
|
|
244
196
|
}
|
|
245
|
-
|
|
246
|
-
set gamma(value) {
|
|
197
|
+
set gamma(value: number) {
|
|
247
198
|
this[2] = checkNumber(value);
|
|
248
199
|
}
|
|
249
200
|
|
|
250
201
|
// phi, theta, psi angle notation
|
|
251
|
-
get phi() {
|
|
202
|
+
get phi(): number {
|
|
252
203
|
return this[0];
|
|
253
204
|
}
|
|
254
|
-
|
|
255
|
-
set phi(value) {
|
|
205
|
+
set phi(value: number) {
|
|
256
206
|
this[0] = checkNumber(value);
|
|
257
207
|
}
|
|
258
208
|
|
|
259
|
-
get theta() {
|
|
209
|
+
get theta(): number {
|
|
260
210
|
return this[1];
|
|
261
211
|
}
|
|
262
|
-
|
|
263
|
-
set theta(value) {
|
|
212
|
+
set theta(value: number) {
|
|
264
213
|
this[1] = checkNumber(value);
|
|
265
214
|
}
|
|
266
215
|
|
|
267
|
-
get psi() {
|
|
216
|
+
get psi(): number {
|
|
268
217
|
return this[2];
|
|
269
218
|
}
|
|
270
|
-
|
|
271
|
-
set psi(value) {
|
|
219
|
+
set psi(value: number) {
|
|
272
220
|
this[2] = checkNumber(value);
|
|
273
221
|
}
|
|
274
|
-
|
|
275
222
|
// roll, pitch, yaw angle notation
|
|
276
|
-
|
|
277
|
-
get roll() {
|
|
223
|
+
|
|
224
|
+
get roll(): number {
|
|
278
225
|
return this[0];
|
|
279
226
|
}
|
|
280
|
-
|
|
281
|
-
set roll(value) {
|
|
227
|
+
set roll(value: number) {
|
|
282
228
|
this[0] = checkNumber(value);
|
|
283
229
|
}
|
|
284
230
|
|
|
285
|
-
|
|
286
|
-
get pitch() {
|
|
231
|
+
get pitch(): number {
|
|
287
232
|
return this[1];
|
|
288
233
|
}
|
|
289
|
-
|
|
290
|
-
set pitch(value) {
|
|
234
|
+
set pitch(value: number) {
|
|
291
235
|
this[1] = checkNumber(value);
|
|
292
236
|
}
|
|
293
237
|
|
|
294
|
-
|
|
295
|
-
get yaw() {
|
|
238
|
+
get yaw(): number {
|
|
296
239
|
return this[2];
|
|
297
240
|
}
|
|
298
|
-
|
|
299
|
-
set yaw(value) {
|
|
241
|
+
set yaw(value: number) {
|
|
300
242
|
this[2] = checkNumber(value);
|
|
301
243
|
}
|
|
302
244
|
|
|
303
245
|
// rotation order, in all three angle notations
|
|
304
|
-
get order() {
|
|
246
|
+
get order(): RotationOrder {
|
|
305
247
|
return this[3];
|
|
306
248
|
}
|
|
307
|
-
|
|
308
|
-
set order(value) {
|
|
249
|
+
set order(value: RotationOrder) {
|
|
309
250
|
this[3] = checkOrder(value);
|
|
310
251
|
}
|
|
311
252
|
|
|
312
|
-
/* eslint-disable no-multi-spaces, brace-style, no-return-assign */
|
|
313
|
-
|
|
314
253
|
// Constructors
|
|
315
|
-
fromVector3(v
|
|
254
|
+
fromVector3(v: Readonly<NumericArray>, order: RotationOrder): this {
|
|
316
255
|
return this.set(v[0], v[1], v[2], Number.isFinite(order) ? order : this[3]);
|
|
317
256
|
}
|
|
318
257
|
|
|
319
258
|
// TODO - with and without 4th element
|
|
320
|
-
fromArray(array
|
|
259
|
+
fromArray(array: Readonly<NumericArray>, offset: number = 0): this {
|
|
321
260
|
this[0] = array[0 + offset];
|
|
322
261
|
this[1] = array[1 + offset];
|
|
323
262
|
this[2] = array[2 + offset];
|
|
@@ -328,36 +267,36 @@ export default class Euler extends MathArray {
|
|
|
328
267
|
}
|
|
329
268
|
|
|
330
269
|
// Common ZYX rotation order
|
|
331
|
-
fromRollPitchYaw(roll, pitch, yaw) {
|
|
332
|
-
return this.set(roll, pitch, yaw,
|
|
270
|
+
fromRollPitchYaw(roll: number, pitch: number, yaw: number): this {
|
|
271
|
+
return this.set(roll, pitch, yaw, RotationOrder.ZYX);
|
|
333
272
|
}
|
|
334
273
|
|
|
335
|
-
fromRotationMatrix(m
|
|
274
|
+
fromRotationMatrix(m: Readonly<NumericArray>, order: RotationOrder = Euler.DefaultOrder): this {
|
|
336
275
|
this._fromRotationMatrix(m, order);
|
|
337
276
|
return this.check();
|
|
338
277
|
}
|
|
339
278
|
|
|
340
279
|
// ACCESSORS
|
|
341
280
|
|
|
342
|
-
getRotationMatrix(m) {
|
|
281
|
+
getRotationMatrix(m: NumericArray): NumericArray {
|
|
343
282
|
return this._getRotationMatrix(m);
|
|
344
283
|
}
|
|
345
284
|
|
|
346
285
|
// TODO - move to Quaternion
|
|
347
|
-
getQuaternion() {
|
|
286
|
+
getQuaternion(): Quaternion {
|
|
348
287
|
const q = new Quaternion();
|
|
349
|
-
switch (this[
|
|
350
|
-
case
|
|
288
|
+
switch (this[4]) {
|
|
289
|
+
case RotationOrder.XYZ:
|
|
351
290
|
return q.rotateX(this[0]).rotateY(this[1]).rotateZ(this[2]);
|
|
352
|
-
case
|
|
291
|
+
case RotationOrder.YXZ:
|
|
353
292
|
return q.rotateY(this[0]).rotateX(this[1]).rotateZ(this[2]);
|
|
354
|
-
case
|
|
293
|
+
case RotationOrder.ZXY:
|
|
355
294
|
return q.rotateZ(this[0]).rotateX(this[1]).rotateY(this[2]);
|
|
356
|
-
case
|
|
295
|
+
case RotationOrder.ZYX:
|
|
357
296
|
return q.rotateZ(this[0]).rotateY(this[1]).rotateX(this[2]);
|
|
358
|
-
case
|
|
297
|
+
case RotationOrder.YZX:
|
|
359
298
|
return q.rotateY(this[0]).rotateZ(this[1]).rotateX(this[2]);
|
|
360
|
-
case
|
|
299
|
+
case RotationOrder.XZY:
|
|
361
300
|
return q.rotateX(this[0]).rotateZ(this[1]).rotateY(this[2]);
|
|
362
301
|
default:
|
|
363
302
|
throw new Error(ERR_UNKNOWN_ORDER);
|
|
@@ -365,36 +304,28 @@ export default class Euler extends MathArray {
|
|
|
365
304
|
}
|
|
366
305
|
|
|
367
306
|
// INTERNAL METHODS
|
|
368
|
-
|
|
369
|
-
// Concersion from Euler to rotation matrix and from matrix to Euler
|
|
307
|
+
// Conversion from Euler to rotation matrix and from matrix to Euler
|
|
370
308
|
// Adapted from three.js under MIT license
|
|
371
|
-
|
|
372
309
|
// // WARNING: this discards revolution information -bhouston
|
|
373
310
|
// reorder(newOrder) {
|
|
374
311
|
// const q = new Quaternion().setFromEuler(this);
|
|
375
312
|
// return this.setFromQuaternion(q, newOrder);
|
|
376
|
-
|
|
377
313
|
/* eslint-disable complexity, max-statements, one-var */
|
|
378
|
-
_fromRotationMatrix(m
|
|
314
|
+
_fromRotationMatrix(m: Readonly<NumericArray>, order = Euler.DefaultOrder): this {
|
|
379
315
|
// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
m32 = te[6],
|
|
390
|
-
m33 = te[10];
|
|
391
|
-
|
|
316
|
+
const m11 = m[0],
|
|
317
|
+
m12 = m[4],
|
|
318
|
+
m13 = m[8];
|
|
319
|
+
const m21 = m[1],
|
|
320
|
+
m22 = m[5],
|
|
321
|
+
m23 = m[9];
|
|
322
|
+
const m31 = m[2],
|
|
323
|
+
m32 = m[6],
|
|
324
|
+
m33 = m[10];
|
|
392
325
|
order = order || this[3];
|
|
393
|
-
|
|
394
326
|
switch (order) {
|
|
395
327
|
case Euler.XYZ:
|
|
396
328
|
this[1] = Math.asin(clamp(m13, -1, 1));
|
|
397
|
-
|
|
398
329
|
if (Math.abs(m13) < ALMOST_ONE) {
|
|
399
330
|
this[0] = Math.atan2(-m23, m33);
|
|
400
331
|
this[2] = Math.atan2(-m12, m11);
|
|
@@ -403,10 +334,8 @@ export default class Euler extends MathArray {
|
|
|
403
334
|
this[2] = 0;
|
|
404
335
|
}
|
|
405
336
|
break;
|
|
406
|
-
|
|
407
337
|
case Euler.YXZ:
|
|
408
338
|
this[0] = Math.asin(-clamp(m23, -1, 1));
|
|
409
|
-
|
|
410
339
|
if (Math.abs(m23) < ALMOST_ONE) {
|
|
411
340
|
this[1] = Math.atan2(m13, m33);
|
|
412
341
|
this[2] = Math.atan2(m21, m22);
|
|
@@ -415,10 +344,8 @@ export default class Euler extends MathArray {
|
|
|
415
344
|
this[2] = 0;
|
|
416
345
|
}
|
|
417
346
|
break;
|
|
418
|
-
|
|
419
347
|
case Euler.ZXY:
|
|
420
348
|
this[0] = Math.asin(clamp(m32, -1, 1));
|
|
421
|
-
|
|
422
349
|
if (Math.abs(m32) < ALMOST_ONE) {
|
|
423
350
|
this[1] = Math.atan2(-m31, m33);
|
|
424
351
|
this[2] = Math.atan2(-m12, m22);
|
|
@@ -427,10 +354,8 @@ export default class Euler extends MathArray {
|
|
|
427
354
|
this[2] = Math.atan2(m21, m11);
|
|
428
355
|
}
|
|
429
356
|
break;
|
|
430
|
-
|
|
431
357
|
case Euler.ZYX:
|
|
432
358
|
this[1] = Math.asin(-clamp(m31, -1, 1));
|
|
433
|
-
|
|
434
359
|
if (Math.abs(m31) < ALMOST_ONE) {
|
|
435
360
|
this[0] = Math.atan2(m32, m33);
|
|
436
361
|
this[2] = Math.atan2(m21, m11);
|
|
@@ -439,10 +364,8 @@ export default class Euler extends MathArray {
|
|
|
439
364
|
this[2] = Math.atan2(-m12, m22);
|
|
440
365
|
}
|
|
441
366
|
break;
|
|
442
|
-
|
|
443
367
|
case Euler.YZX:
|
|
444
368
|
this[2] = Math.asin(clamp(m21, -1, 1));
|
|
445
|
-
|
|
446
369
|
if (Math.abs(m21) < ALMOST_ONE) {
|
|
447
370
|
this[0] = Math.atan2(-m23, m22);
|
|
448
371
|
this[1] = Math.atan2(-m31, m11);
|
|
@@ -451,10 +374,8 @@ export default class Euler extends MathArray {
|
|
|
451
374
|
this[1] = Math.atan2(m13, m33);
|
|
452
375
|
}
|
|
453
376
|
break;
|
|
454
|
-
|
|
455
377
|
case Euler.XZY:
|
|
456
378
|
this[2] = Math.asin(-clamp(m12, -1, 1));
|
|
457
|
-
|
|
458
379
|
if (Math.abs(m12) < ALMOST_ONE) {
|
|
459
380
|
this[0] = Math.atan2(m32, m22);
|
|
460
381
|
this[1] = Math.atan2(m13, m11);
|
|
@@ -463,19 +384,15 @@ export default class Euler extends MathArray {
|
|
|
463
384
|
this[1] = 0;
|
|
464
385
|
}
|
|
465
386
|
break;
|
|
466
|
-
|
|
467
387
|
default:
|
|
468
388
|
throw new Error(ERR_UNKNOWN_ORDER);
|
|
469
389
|
}
|
|
470
|
-
|
|
471
390
|
this[3] = order;
|
|
472
|
-
|
|
473
391
|
return this;
|
|
474
392
|
}
|
|
475
393
|
|
|
476
|
-
_getRotationMatrix(result) {
|
|
394
|
+
_getRotationMatrix(result: NumericArray): NumericArray {
|
|
477
395
|
const te = result || [-0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0, -0];
|
|
478
|
-
|
|
479
396
|
const x = this.x,
|
|
480
397
|
y = this.y,
|
|
481
398
|
z = this.z;
|
|
@@ -485,147 +402,119 @@ export default class Euler extends MathArray {
|
|
|
485
402
|
const b = Math.sin(x);
|
|
486
403
|
const d = Math.sin(y);
|
|
487
404
|
const f = Math.sin(z);
|
|
488
|
-
|
|
489
405
|
switch (this[3]) {
|
|
490
406
|
case Euler.XYZ: {
|
|
491
407
|
const ae = a * e,
|
|
492
408
|
af = a * f,
|
|
493
409
|
be = b * e,
|
|
494
410
|
bf = b * f;
|
|
495
|
-
|
|
496
411
|
te[0] = c * e;
|
|
497
412
|
te[4] = -c * f;
|
|
498
413
|
te[8] = d;
|
|
499
|
-
|
|
500
414
|
te[1] = af + be * d;
|
|
501
415
|
te[5] = ae - bf * d;
|
|
502
416
|
te[9] = -b * c;
|
|
503
|
-
|
|
504
417
|
te[2] = bf - ae * d;
|
|
505
418
|
te[6] = be + af * d;
|
|
506
419
|
te[10] = a * c;
|
|
507
420
|
break;
|
|
508
421
|
}
|
|
509
|
-
|
|
510
422
|
case Euler.YXZ: {
|
|
511
423
|
const ce = c * e,
|
|
512
424
|
cf = c * f,
|
|
513
425
|
de = d * e,
|
|
514
426
|
df = d * f;
|
|
515
|
-
|
|
516
427
|
te[0] = ce + df * b;
|
|
517
428
|
te[4] = de * b - cf;
|
|
518
429
|
te[8] = a * d;
|
|
519
|
-
|
|
520
430
|
te[1] = a * f;
|
|
521
431
|
te[5] = a * e;
|
|
522
432
|
te[9] = -b;
|
|
523
|
-
|
|
524
433
|
te[2] = cf * b - de;
|
|
525
434
|
te[6] = df + ce * b;
|
|
526
435
|
te[10] = a * c;
|
|
527
436
|
break;
|
|
528
437
|
}
|
|
529
|
-
|
|
530
438
|
case Euler.ZXY: {
|
|
531
439
|
const ce = c * e,
|
|
532
440
|
cf = c * f,
|
|
533
441
|
de = d * e,
|
|
534
442
|
df = d * f;
|
|
535
|
-
|
|
536
443
|
te[0] = ce - df * b;
|
|
537
444
|
te[4] = -a * f;
|
|
538
445
|
te[8] = de + cf * b;
|
|
539
|
-
|
|
540
446
|
te[1] = cf + de * b;
|
|
541
447
|
te[5] = a * e;
|
|
542
448
|
te[9] = df - ce * b;
|
|
543
|
-
|
|
544
449
|
te[2] = -a * d;
|
|
545
450
|
te[6] = b;
|
|
546
451
|
te[10] = a * c;
|
|
547
452
|
break;
|
|
548
453
|
}
|
|
549
|
-
|
|
550
454
|
case Euler.ZYX: {
|
|
551
455
|
const ae = a * e,
|
|
552
456
|
af = a * f,
|
|
553
457
|
be = b * e,
|
|
554
458
|
bf = b * f;
|
|
555
|
-
|
|
556
459
|
te[0] = c * e;
|
|
557
460
|
te[4] = be * d - af;
|
|
558
461
|
te[8] = ae * d + bf;
|
|
559
|
-
|
|
560
462
|
te[1] = c * f;
|
|
561
463
|
te[5] = bf * d + ae;
|
|
562
464
|
te[9] = af * d - be;
|
|
563
|
-
|
|
564
465
|
te[2] = -d;
|
|
565
466
|
te[6] = b * c;
|
|
566
467
|
te[10] = a * c;
|
|
567
468
|
break;
|
|
568
469
|
}
|
|
569
|
-
|
|
570
470
|
case Euler.YZX: {
|
|
571
471
|
const ac = a * c,
|
|
572
472
|
ad = a * d,
|
|
573
473
|
bc = b * c,
|
|
574
474
|
bd = b * d;
|
|
575
|
-
|
|
576
475
|
te[0] = c * e;
|
|
577
476
|
te[4] = bd - ac * f;
|
|
578
477
|
te[8] = bc * f + ad;
|
|
579
|
-
|
|
580
478
|
te[1] = f;
|
|
581
479
|
te[5] = a * e;
|
|
582
480
|
te[9] = -b * e;
|
|
583
|
-
|
|
584
481
|
te[2] = -d * e;
|
|
585
482
|
te[6] = ad * f + bc;
|
|
586
483
|
te[10] = ac - bd * f;
|
|
587
484
|
break;
|
|
588
485
|
}
|
|
589
|
-
|
|
590
486
|
case Euler.XZY: {
|
|
591
487
|
const ac = a * c,
|
|
592
488
|
ad = a * d,
|
|
593
489
|
bc = b * c,
|
|
594
490
|
bd = b * d;
|
|
595
|
-
|
|
596
491
|
te[0] = c * e;
|
|
597
492
|
te[4] = -f;
|
|
598
493
|
te[8] = d * e;
|
|
599
|
-
|
|
600
494
|
te[1] = ac * f + bd;
|
|
601
495
|
te[5] = a * e;
|
|
602
496
|
te[9] = ad * f - bc;
|
|
603
|
-
|
|
604
497
|
te[2] = bc * f - ad;
|
|
605
498
|
te[6] = b * e;
|
|
606
499
|
te[10] = bd * f + ac;
|
|
607
500
|
break;
|
|
608
501
|
}
|
|
609
|
-
|
|
610
502
|
default:
|
|
611
503
|
throw new Error(ERR_UNKNOWN_ORDER);
|
|
612
504
|
}
|
|
613
|
-
|
|
614
505
|
// last column
|
|
615
506
|
te[3] = 0;
|
|
616
507
|
te[7] = 0;
|
|
617
508
|
te[11] = 0;
|
|
618
|
-
|
|
619
509
|
// bottom row
|
|
620
510
|
te[12] = 0;
|
|
621
511
|
te[13] = 0;
|
|
622
512
|
te[14] = 0;
|
|
623
513
|
te[15] = 1;
|
|
624
|
-
|
|
625
514
|
return te;
|
|
626
515
|
}
|
|
627
516
|
|
|
628
|
-
toQuaternion() {
|
|
517
|
+
toQuaternion(): Quaternion {
|
|
629
518
|
// Abbreviations for the various angular functions
|
|
630
519
|
const cy = Math.cos(this.yaw * 0.5);
|
|
631
520
|
const sy = Math.sin(this.yaw * 0.5);
|
|
@@ -633,12 +522,23 @@ export default class Euler extends MathArray {
|
|
|
633
522
|
const sr = Math.sin(this.roll * 0.5);
|
|
634
523
|
const cp = Math.cos(this.pitch * 0.5);
|
|
635
524
|
const sp = Math.sin(this.pitch * 0.5);
|
|
636
|
-
|
|
637
525
|
const w = cy * cr * cp + sy * sr * sp;
|
|
638
526
|
const x = cy * sr * cp - sy * cr * sp;
|
|
639
527
|
const y = cy * cr * sp + sy * sr * cp;
|
|
640
528
|
const z = sy * cr * cp - cy * sr * sp;
|
|
641
|
-
|
|
642
529
|
return new Quaternion(x, y, z, w);
|
|
643
530
|
}
|
|
644
531
|
}
|
|
532
|
+
|
|
533
|
+
// HELPER FUNCTIONS
|
|
534
|
+
|
|
535
|
+
function validateOrder(value: number): boolean {
|
|
536
|
+
return value >= 0 && value < 6;
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
function checkOrder(value: number) {
|
|
540
|
+
if (value < 0 && value >= 6) {
|
|
541
|
+
throw new Error(ERR_UNKNOWN_ORDER);
|
|
542
|
+
}
|
|
543
|
+
return value;
|
|
544
|
+
}
|