@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.
Files changed (193) hide show
  1. package/dist/classes/base/math-array.d.ts +66 -0
  2. package/dist/classes/base/math-array.d.ts.map +1 -0
  3. package/dist/classes/base/math-array.js +216 -0
  4. package/dist/classes/base/matrix.d.ts +14 -0
  5. package/dist/classes/base/matrix.d.ts.map +1 -0
  6. package/dist/classes/base/matrix.js +61 -0
  7. package/dist/classes/base/vector.d.ts +44 -0
  8. package/dist/classes/base/vector.d.ts.map +1 -0
  9. package/dist/classes/base/vector.js +126 -0
  10. package/dist/classes/euler.d.ts +77 -0
  11. package/dist/classes/euler.d.ts.map +1 -0
  12. package/dist/classes/euler.js +485 -0
  13. package/dist/classes/matrix3.d.ts +60 -0
  14. package/dist/classes/matrix3.d.ts.map +1 -0
  15. package/dist/classes/matrix3.js +201 -0
  16. package/dist/classes/matrix4.d.ts +226 -0
  17. package/dist/classes/matrix4.d.ts.map +1 -0
  18. package/dist/classes/matrix4.js +538 -0
  19. package/dist/classes/pose.d.ts +40 -0
  20. package/dist/classes/pose.d.ts.map +1 -0
  21. package/dist/classes/pose.js +109 -0
  22. package/dist/classes/quaternion.d.ts +63 -0
  23. package/dist/classes/quaternion.d.ts.map +1 -0
  24. package/dist/classes/quaternion.js +262 -0
  25. package/dist/classes/spherical-coordinates.d.ts +60 -0
  26. package/dist/classes/spherical-coordinates.d.ts.map +1 -0
  27. package/dist/classes/spherical-coordinates.js +148 -0
  28. package/dist/classes/vector2.d.ts +55 -0
  29. package/dist/classes/vector2.d.ts.map +1 -0
  30. package/dist/classes/vector2.js +111 -0
  31. package/dist/classes/vector3.d.ts +56 -0
  32. package/dist/classes/vector3.d.ts.map +1 -0
  33. package/dist/classes/vector3.js +133 -0
  34. package/dist/classes/vector4.d.ts +41 -0
  35. package/dist/classes/vector4.d.ts.map +1 -0
  36. package/dist/classes/vector4.js +114 -0
  37. package/dist/es5/classes/base/math-array.js +57 -61
  38. package/dist/es5/classes/base/math-array.js.map +1 -1
  39. package/dist/es5/classes/base/matrix.js +0 -14
  40. package/dist/es5/classes/base/matrix.js.map +1 -1
  41. package/dist/es5/classes/base/vector.js +0 -12
  42. package/dist/es5/classes/base/vector.js.map +1 -1
  43. package/dist/es5/classes/euler.js +63 -49
  44. package/dist/es5/classes/euler.js.map +1 -1
  45. package/dist/es5/classes/matrix3.js +60 -33
  46. package/dist/es5/classes/matrix3.js.map +1 -1
  47. package/dist/es5/classes/matrix4.js +167 -164
  48. package/dist/es5/classes/matrix4.js.map +1 -1
  49. package/dist/es5/classes/pose.js +7 -6
  50. package/dist/es5/classes/pose.js.map +1 -1
  51. package/dist/es5/classes/quaternion.js +44 -36
  52. package/dist/es5/classes/quaternion.js.map +1 -1
  53. package/dist/es5/classes/spherical-coordinates.js +12 -8
  54. package/dist/es5/classes/spherical-coordinates.js.map +1 -1
  55. package/dist/es5/classes/vector2.js.map +1 -1
  56. package/dist/es5/classes/vector3.js +7 -2
  57. package/dist/es5/classes/vector3.js.map +1 -1
  58. package/dist/es5/classes/vector4.js +7 -2
  59. package/dist/es5/classes/vector4.js.map +1 -1
  60. package/dist/es5/docs/README.md +0 -0
  61. package/dist/es5/index.js +71 -89
  62. package/dist/es5/index.js.map +1 -1
  63. package/dist/es5/lib/assert.js.map +1 -1
  64. package/dist/es5/lib/common.js +40 -43
  65. package/dist/es5/lib/common.js.map +1 -1
  66. package/dist/es5/lib/gl-matrix-extras.js.map +1 -1
  67. package/dist/es5/lib/gl-matrix.d.js +2 -0
  68. package/dist/es5/lib/gl-matrix.d.js.map +1 -0
  69. package/dist/es5/lib/math-utils.js.map +1 -1
  70. package/dist/es5/lib/validators.js.map +1 -1
  71. package/dist/esm/classes/base/math-array.js +45 -47
  72. package/dist/esm/classes/base/math-array.js.map +1 -1
  73. package/dist/esm/classes/base/matrix.js +0 -11
  74. package/dist/esm/classes/base/matrix.js.map +1 -1
  75. package/dist/esm/classes/base/vector.js +0 -10
  76. package/dist/esm/classes/base/vector.js.map +1 -1
  77. package/dist/esm/classes/euler.js +61 -48
  78. package/dist/esm/classes/euler.js.map +1 -1
  79. package/dist/esm/classes/matrix3.js +55 -33
  80. package/dist/esm/classes/matrix3.js.map +1 -1
  81. package/dist/esm/classes/matrix4.js +156 -136
  82. package/dist/esm/classes/matrix4.js.map +1 -1
  83. package/dist/esm/classes/pose.js +8 -4
  84. package/dist/esm/classes/pose.js.map +1 -1
  85. package/dist/esm/classes/quaternion.js +37 -27
  86. package/dist/esm/classes/quaternion.js.map +1 -1
  87. package/dist/esm/classes/spherical-coordinates.js +15 -5
  88. package/dist/esm/classes/spherical-coordinates.js.map +1 -1
  89. package/dist/esm/classes/vector2.js.map +1 -1
  90. package/dist/esm/classes/vector3.js +7 -2
  91. package/dist/esm/classes/vector3.js.map +1 -1
  92. package/dist/esm/classes/vector4.js +7 -2
  93. package/dist/esm/classes/vector4.js.map +1 -1
  94. package/dist/esm/docs/README.md +0 -0
  95. package/dist/esm/index.js +2 -13
  96. package/dist/esm/index.js.map +1 -1
  97. package/dist/esm/lib/assert.js.map +1 -1
  98. package/dist/esm/lib/common.js +41 -44
  99. package/dist/esm/lib/common.js.map +1 -1
  100. package/dist/esm/lib/gl-matrix-extras.js.map +1 -1
  101. package/dist/esm/lib/gl-matrix.d.js +2 -0
  102. package/dist/esm/lib/gl-matrix.d.js.map +1 -0
  103. package/dist/esm/lib/math-utils.js.map +1 -1
  104. package/dist/esm/lib/validators.js.map +1 -1
  105. package/dist/index.d.ts +17 -0
  106. package/dist/index.d.ts.map +1 -0
  107. package/dist/index.js +24 -0
  108. package/dist/lib/assert.d.ts +2 -0
  109. package/dist/lib/assert.d.ts.map +1 -0
  110. package/dist/lib/assert.js +5 -0
  111. package/dist/lib/common.d.ts +93 -0
  112. package/dist/lib/common.d.ts.map +1 -0
  113. package/dist/lib/common.js +210 -0
  114. package/dist/lib/gl-matrix-extras.d.ts +7 -0
  115. package/dist/lib/gl-matrix-extras.d.ts.map +1 -0
  116. package/dist/lib/gl-matrix-extras.js +49 -0
  117. package/dist/lib/math-utils.d.ts +28 -0
  118. package/dist/lib/math-utils.d.ts.map +1 -0
  119. package/dist/lib/math-utils.js +28 -0
  120. package/dist/lib/validators.d.ts +6 -0
  121. package/dist/lib/validators.d.ts.map +1 -0
  122. package/dist/lib/validators.js +33 -0
  123. package/package.json +5 -4
  124. package/src/classes/base/math-array.ts +265 -0
  125. package/src/classes/base/{matrix.js → matrix.ts} +15 -19
  126. package/src/classes/base/{vector.js → vector.ts} +47 -54
  127. package/src/classes/{euler.js → euler.ts} +121 -221
  128. package/src/classes/matrix3.ts +253 -0
  129. package/src/classes/matrix4.ts +668 -0
  130. package/src/classes/{pose.js → pose.ts} +52 -49
  131. package/src/classes/{quaternion.js → quaternion.ts} +107 -95
  132. package/src/classes/{spherical-coordinates.js → spherical-coordinates.ts} +84 -54
  133. package/src/classes/vector2.ts +127 -0
  134. package/src/classes/{vector3.js → vector3.ts} +43 -55
  135. package/src/classes/{vector4.js → vector4.ts} +44 -48
  136. package/src/docs/README.md +0 -0
  137. package/{dist/esm/index.d.ts → src/index.ts} +32 -34
  138. package/src/lib/{assert.js → assert.ts} +1 -1
  139. package/src/lib/common.ts +304 -0
  140. package/src/lib/{gl-matrix-extras.js → gl-matrix-extras.ts} +26 -5
  141. package/src/lib/gl-matrix.d.ts +266 -0
  142. package/src/lib/{math-utils.js → math-utils.ts} +0 -0
  143. package/src/lib/{validators.js → validators.ts} +10 -6
  144. package/dist/es5/addons/polygon.d.ts +0 -17
  145. package/dist/es5/classes/base/math-array.d.ts +0 -56
  146. package/dist/es5/classes/base/matrix.d.ts +0 -15
  147. package/dist/es5/classes/base/vector.d.ts +0 -45
  148. package/dist/es5/classes/euler.d.ts +0 -92
  149. package/dist/es5/classes/matrix3.d.ts +0 -91
  150. package/dist/es5/classes/matrix4.d.ts +0 -161
  151. package/dist/es5/classes/pose.d.ts +0 -92
  152. package/dist/es5/classes/quaternion.d.ts +0 -107
  153. package/dist/es5/classes/spherical-coordinates.d.ts +0 -87
  154. package/dist/es5/classes/vector2.d.ts +0 -65
  155. package/dist/es5/classes/vector3.d.ts +0 -65
  156. package/dist/es5/classes/vector4.d.ts +0 -34
  157. package/dist/es5/index.d.ts +0 -54
  158. package/dist/es5/lib/common.d.ts +0 -80
  159. package/dist/esm/addons/polygon.d.ts +0 -17
  160. package/dist/esm/classes/base/math-array.d.ts +0 -56
  161. package/dist/esm/classes/base/matrix.d.ts +0 -15
  162. package/dist/esm/classes/base/vector.d.ts +0 -45
  163. package/dist/esm/classes/euler.d.ts +0 -92
  164. package/dist/esm/classes/matrix3.d.ts +0 -91
  165. package/dist/esm/classes/matrix4.d.ts +0 -161
  166. package/dist/esm/classes/pose.d.ts +0 -92
  167. package/dist/esm/classes/quaternion.d.ts +0 -107
  168. package/dist/esm/classes/spherical-coordinates.d.ts +0 -87
  169. package/dist/esm/classes/vector2.d.ts +0 -65
  170. package/dist/esm/classes/vector3.d.ts +0 -65
  171. package/dist/esm/classes/vector4.d.ts +0 -34
  172. package/dist/esm/lib/common.d.ts +0 -80
  173. package/src/addons/polygon.d.ts +0 -17
  174. package/src/classes/base/math-array.d.ts +0 -56
  175. package/src/classes/base/math-array.js +0 -250
  176. package/src/classes/base/matrix.d.ts +0 -15
  177. package/src/classes/base/vector.d.ts +0 -45
  178. package/src/classes/euler.d.ts +0 -92
  179. package/src/classes/matrix3.d.ts +0 -91
  180. package/src/classes/matrix3.js +0 -225
  181. package/src/classes/matrix4.d.ts +0 -161
  182. package/src/classes/matrix4.js +0 -530
  183. package/src/classes/pose.d.ts +0 -92
  184. package/src/classes/quaternion.d.ts +0 -107
  185. package/src/classes/spherical-coordinates.d.ts +0 -87
  186. package/src/classes/vector2.d.ts +0 -65
  187. package/src/classes/vector2.js +0 -122
  188. package/src/classes/vector3.d.ts +0 -65
  189. package/src/classes/vector4.d.ts +0 -34
  190. package/src/index.d.ts +0 -54
  191. package/src/index.js +0 -86
  192. package/src/lib/common.d.ts +0 -80
  193. 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
- function validateOrder(value) {
31
- return value >= 0 && value < 6;
32
- }
33
-
34
- function checkOrder(value) {
35
- if (value < 0 && value >= 6) {
36
- throw new Error(ERR_UNKNOWN_ORDER);
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
- /* eslint-disable no-multi-spaces, brace-style, no-return-assign */
53
- static get ZYX() {
54
- return 0;
25
+ static get ZYX(): RotationOrder {
26
+ return RotationOrder.ZYX;
55
27
  }
56
-
57
- static get YXZ() {
58
- return 1;
28
+ static get YXZ(): RotationOrder {
29
+ return RotationOrder.YXZ;
59
30
  }
60
-
61
- static get XZY() {
62
- return 2;
31
+ static get XZY(): RotationOrder {
32
+ return RotationOrder.XZY;
63
33
  }
64
-
65
- static get ZXY() {
66
- return 3;
34
+ static get ZXY(): RotationOrder {
35
+ return RotationOrder.ZXY;
67
36
  }
68
-
69
- static get YZX() {
70
- return 4;
37
+ static get YZX(): RotationOrder {
38
+ return RotationOrder.YZX;
71
39
  }
72
-
73
- static get XYZ() {
74
- return 5;
40
+ static get XYZ(): RotationOrder {
41
+ return RotationOrder.XYZ;
75
42
  }
76
-
77
- static get RollPitchYaw() {
78
- return 0;
43
+ static get RollPitchYaw(): RotationOrder {
44
+ return RotationOrder.ZYX;
79
45
  }
80
-
81
- static get DefaultOrder() {
82
- return Euler.ZYX;
46
+ static get DefaultOrder(): RotationOrder {
47
+ return RotationOrder.ZYX;
83
48
  }
84
-
85
- static get RotationOrders() {
86
- return ['ZYX', 'YXZ', 'XZY', 'ZXY', 'YZX', 'XYZ'];
49
+ static get RotationOrders(): typeof RotationOrder {
50
+ return RotationOrder;
87
51
  }
88
-
89
- static rotationOrder(order) {
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.0 * (ysqr + z * z) + 1.0;
123
- const t1 = +2.0 * (x * y + w * z);
124
- let t2 = -2.0 * (x * z - w * y);
125
- const t3 = +2.0 * (y * z + w * x);
126
- const t4 = -2.0 * (x * x + ysqr) + 1.0;
127
-
128
- t2 = t2 > 1.0 ? 1.0 : 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
- return new Euler(roll, pitch, yaw, Euler.RollPitchYaw);
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
- /** @type {number} */
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
- /** @type {number} */
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
- /** @type {number} */
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
- /** @type {number} */
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
- /** @type {number} */
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
- /** @type {number} */
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, order) {
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, offset = 0) {
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, Euler.ZYX);
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, order = Euler.DefaultOrder) {
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[3]) {
350
- case Euler.XYZ:
288
+ switch (this[4]) {
289
+ case RotationOrder.XYZ:
351
290
  return q.rotateX(this[0]).rotateY(this[1]).rotateZ(this[2]);
352
- case Euler.YXZ:
291
+ case RotationOrder.YXZ:
353
292
  return q.rotateY(this[0]).rotateX(this[1]).rotateZ(this[2]);
354
- case Euler.ZXY:
293
+ case RotationOrder.ZXY:
355
294
  return q.rotateZ(this[0]).rotateX(this[1]).rotateY(this[2]);
356
- case Euler.ZYX:
295
+ case RotationOrder.ZYX:
357
296
  return q.rotateZ(this[0]).rotateY(this[1]).rotateX(this[2]);
358
- case Euler.YZX:
297
+ case RotationOrder.YZX:
359
298
  return q.rotateY(this[0]).rotateZ(this[1]).rotateX(this[2]);
360
- case Euler.XZY:
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, order = Euler.DefaultOrder) {
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
- const te = m.elements;
382
- const m11 = te[0],
383
- m12 = te[4],
384
- m13 = te[8];
385
- const m21 = te[1],
386
- m22 = te[5],
387
- m23 = te[9];
388
- const m31 = te[2],
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
+ }