@math.gl/core 3.6.0-alpha.1 → 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 +61 -31
- package/dist/classes/base/math-array.d.ts.map +1 -1
- package/dist/classes/base/math-array.js +67 -65
- package/dist/classes/base/matrix.d.ts +12 -10
- package/dist/classes/base/matrix.d.ts.map +1 -1
- package/dist/classes/base/matrix.js +2 -10
- package/dist/classes/base/vector.d.ts +37 -25
- package/dist/classes/base/vector.d.ts.map +1 -1
- package/dist/classes/base/vector.js +17 -24
- package/dist/classes/euler.d.ts +59 -55
- package/dist/classes/euler.d.ts.map +1 -1
- package/dist/classes/euler.js +57 -77
- package/dist/classes/matrix3.d.ts +58 -41
- package/dist/classes/matrix3.d.ts.map +1 -1
- package/dist/classes/matrix3.js +68 -59
- package/dist/classes/matrix4.d.ts +214 -90
- package/dist/classes/matrix4.d.ts.map +1 -1
- package/dist/classes/matrix4.js +252 -171
- package/dist/classes/pose.d.ts +29 -26
- package/dist/classes/pose.d.ts.map +1 -1
- package/dist/classes/pose.js +6 -23
- package/dist/classes/quaternion.d.ts +61 -40
- package/dist/classes/quaternion.d.ts.map +1 -1
- package/dist/classes/quaternion.js +49 -53
- package/dist/classes/spherical-coordinates.d.ts +45 -25
- package/dist/classes/spherical-coordinates.d.ts.map +1 -1
- package/dist/classes/spherical-coordinates.js +30 -24
- package/dist/classes/vector2.d.ts +51 -15
- package/dist/classes/vector2.d.ts.map +1 -1
- package/dist/classes/vector2.js +29 -23
- package/dist/classes/vector3.d.ts +47 -32
- package/dist/classes/vector3.d.ts.map +1 -1
- package/dist/classes/vector3.js +16 -30
- package/dist/classes/vector4.d.ts +37 -19
- package/dist/classes/vector4.d.ts.map +1 -1
- package/dist/classes/vector4.js +12 -24
- package/dist/es5/classes/base/math-array.js +248 -179
- package/dist/es5/classes/base/math-array.js.map +1 -1
- package/dist/es5/classes/base/matrix.js +74 -54
- package/dist/es5/classes/base/matrix.js.map +1 -1
- package/dist/es5/classes/base/vector.js +167 -121
- package/dist/es5/classes/base/vector.js.map +1 -1
- package/dist/es5/classes/euler.js +575 -480
- package/dist/es5/classes/euler.js.map +1 -1
- package/dist/es5/classes/matrix3.js +234 -158
- package/dist/es5/classes/matrix3.js.map +1 -1
- package/dist/es5/classes/matrix4.js +510 -417
- package/dist/es5/classes/matrix4.js.map +1 -1
- package/dist/es5/classes/pose.js +126 -101
- package/dist/es5/classes/pose.js.map +1 -1
- package/dist/es5/classes/quaternion.js +285 -213
- package/dist/es5/classes/quaternion.js.map +1 -1
- package/dist/es5/classes/spherical-coordinates.js +170 -125
- package/dist/es5/classes/spherical-coordinates.js.map +1 -1
- package/dist/es5/classes/vector2.js +118 -76
- package/dist/es5/classes/vector2.js.map +1 -1
- package/dist/es5/classes/vector3.js +171 -119
- package/dist/es5/classes/vector3.js.map +1 -1
- package/dist/es5/classes/vector4.js +141 -94
- package/dist/es5/classes/vector4.js.map +1 -1
- package/dist/es5/index.js +34 -34
- package/dist/es5/lib/common.js +56 -30
- package/dist/es5/lib/common.js.map +1 -1
- package/dist/es5/lib/gl-matrix-extras.js +14 -14
- 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/validators.js +5 -3
- 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/lib/common.js +8 -8
- 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/validators.js.map +1 -1
- package/dist/lib/common.d.ts +14 -11
- package/dist/lib/common.d.ts.map +1 -1
- package/dist/lib/common.js +10 -23
- package/dist/lib/gl-matrix-extras.d.ts +6 -5
- package/dist/lib/gl-matrix-extras.d.ts.map +1 -1
- package/dist/lib/gl-matrix-extras.js +0 -1
- package/dist/lib/validators.d.ts +5 -4
- package/dist/lib/validators.d.ts.map +1 -1
- package/dist/lib/validators.js +0 -19
- package/package.json +4 -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/lib/common.ts +58 -37
- package/src/lib/gl-matrix-extras.ts +26 -5
- package/src/lib/gl-matrix.d.ts +266 -0
- package/src/lib/validators.ts +10 -6
- package/dist/es5/classes/base/math-array.d.js +0 -46
- package/dist/es5/classes/base/math-array.d.js.map +0 -1
- package/dist/es5/classes/base/matrix.d.js +0 -15
- package/dist/es5/classes/base/matrix.d.js.map +0 -1
- package/dist/es5/classes/base/vector.d.js +0 -24
- package/dist/es5/classes/base/vector.d.js.map +0 -1
- package/dist/es5/classes/euler.d.js +0 -45
- package/dist/es5/classes/euler.d.js.map +0 -1
- package/dist/es5/classes/matrix3.d.js +0 -25
- package/dist/es5/classes/matrix3.d.js.map +0 -1
- package/dist/es5/classes/matrix4.d.js +0 -25
- package/dist/es5/classes/matrix4.d.js.map +0 -1
- package/dist/es5/classes/pose.d.js +0 -25
- package/dist/es5/classes/pose.d.js.map +0 -1
- package/dist/es5/classes/quaternion.d.js +0 -27
- package/dist/es5/classes/quaternion.d.js.map +0 -1
- package/dist/es5/classes/spherical-coordinates.d.js +0 -27
- package/dist/es5/classes/spherical-coordinates.d.js.map +0 -1
- package/dist/es5/classes/vector2.d.js +0 -18
- package/dist/es5/classes/vector2.d.js.map +0 -1
- package/dist/es5/classes/vector3.d.js +0 -24
- package/dist/es5/classes/vector3.d.js.map +0 -1
- package/dist/es5/classes/vector4.d.js +0 -25
- package/dist/es5/classes/vector4.d.js.map +0 -1
- package/dist/esm/classes/base/math-array.d.js +0 -36
- package/dist/esm/classes/base/math-array.d.js.map +0 -1
- package/dist/esm/classes/base/matrix.d.js +0 -3
- package/dist/esm/classes/base/matrix.d.js.map +0 -1
- package/dist/esm/classes/base/vector.d.js +0 -13
- package/dist/esm/classes/base/vector.d.js.map +0 -1
- package/dist/esm/classes/euler.d.js +0 -55
- package/dist/esm/classes/euler.d.js.map +0 -1
- package/dist/esm/classes/matrix3.d.js +0 -15
- package/dist/esm/classes/matrix3.d.js.map +0 -1
- package/dist/esm/classes/matrix4.d.js +0 -15
- package/dist/esm/classes/matrix4.d.js.map +0 -1
- package/dist/esm/classes/pose.d.js +0 -18
- package/dist/esm/classes/pose.d.js.map +0 -1
- package/dist/esm/classes/quaternion.d.js +0 -19
- package/dist/esm/classes/quaternion.d.js.map +0 -1
- package/dist/esm/classes/spherical-coordinates.d.js +0 -22
- package/dist/esm/classes/spherical-coordinates.d.js.map +0 -1
- package/dist/esm/classes/vector2.d.js +0 -6
- package/dist/esm/classes/vector2.d.js.map +0 -1
- package/dist/esm/classes/vector3.d.js +0 -13
- package/dist/esm/classes/vector3.d.js.map +0 -1
- package/dist/esm/classes/vector4.d.js +0 -15
- package/dist/esm/classes/vector4.d.js.map +0 -1
- package/src/classes/base/math-array.d.ts +0 -55
- 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
|
@@ -1,44 +1,36 @@
|
|
|
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.
|
|
2
|
+
// MIT License
|
|
20
3
|
|
|
21
4
|
import Vector from './base/vector';
|
|
22
5
|
import {config, isArray} from '../lib/common';
|
|
23
6
|
import {checkNumber} from '../lib/validators';
|
|
24
|
-
|
|
25
|
-
// @ts-ignore: error TS2307: Cannot find module 'gl-matrix/...'.
|
|
26
7
|
import * as vec4 from 'gl-matrix/vec3';
|
|
27
|
-
|
|
8
|
+
/* eslint-disable camelcase */
|
|
28
9
|
import {vec4_transformMat2, vec4_transformMat3} from '../lib/gl-matrix-extras';
|
|
10
|
+
import {NumericArray} from '@math.gl/types';
|
|
11
|
+
|
|
12
|
+
import type Matrix4 from './matrix4';
|
|
29
13
|
|
|
30
|
-
|
|
14
|
+
let ZERO: Vector4;
|
|
31
15
|
|
|
16
|
+
/**
|
|
17
|
+
* Four-element vector class.
|
|
18
|
+
* Subclass of Array<number>
|
|
19
|
+
*/
|
|
32
20
|
export default class Vector4 extends Vector {
|
|
33
|
-
static get ZERO() {
|
|
34
|
-
|
|
21
|
+
static get ZERO(): Vector4 {
|
|
22
|
+
if (!ZERO) {
|
|
23
|
+
ZERO = new Vector4(0, 0, 0, 0);
|
|
24
|
+
Object.freeze(ZERO);
|
|
25
|
+
}
|
|
26
|
+
return ZERO;
|
|
35
27
|
}
|
|
36
28
|
|
|
37
|
-
constructor(x = 0, y = 0, z = 0, w = 0) {
|
|
29
|
+
constructor(x: number | Readonly<NumericArray> = 0, y: number = 0, z: number = 0, w: number = 0) {
|
|
38
30
|
// PERF NOTE: initialize elements as double precision numbers
|
|
39
31
|
super(-0, -0, -0, -0);
|
|
40
32
|
if (isArray(x) && arguments.length === 1) {
|
|
41
|
-
this.copy(x);
|
|
33
|
+
this.copy(x as Readonly<NumericArray>);
|
|
42
34
|
} else {
|
|
43
35
|
// this.set(x, y, z, w);
|
|
44
36
|
if (config.debug) {
|
|
@@ -47,14 +39,14 @@ export default class Vector4 extends Vector {
|
|
|
47
39
|
checkNumber(z);
|
|
48
40
|
checkNumber(w);
|
|
49
41
|
}
|
|
50
|
-
this[0] = x;
|
|
42
|
+
this[0] = x as number;
|
|
51
43
|
this[1] = y;
|
|
52
44
|
this[2] = z;
|
|
53
45
|
this[3] = w;
|
|
54
46
|
}
|
|
55
47
|
}
|
|
56
48
|
|
|
57
|
-
set(x, y, z, w) {
|
|
49
|
+
set(x: number, y: number, z: number, w: number): this {
|
|
58
50
|
this[0] = x;
|
|
59
51
|
this[1] = y;
|
|
60
52
|
this[2] = z;
|
|
@@ -62,7 +54,7 @@ export default class Vector4 extends Vector {
|
|
|
62
54
|
return this.check();
|
|
63
55
|
}
|
|
64
56
|
|
|
65
|
-
copy(array) {
|
|
57
|
+
copy(array: Readonly<NumericArray>): this {
|
|
66
58
|
this[0] = array[0];
|
|
67
59
|
this[1] = array[1];
|
|
68
60
|
this[2] = array[2];
|
|
@@ -70,7 +62,7 @@ export default class Vector4 extends Vector {
|
|
|
70
62
|
return this.check();
|
|
71
63
|
}
|
|
72
64
|
|
|
73
|
-
fromObject(object) {
|
|
65
|
+
fromObject(object: {x: number; y: number; z: number; w: number}): this {
|
|
74
66
|
if (config.debug) {
|
|
75
67
|
checkNumber(object.x);
|
|
76
68
|
checkNumber(object.y);
|
|
@@ -84,61 +76,65 @@ export default class Vector4 extends Vector {
|
|
|
84
76
|
return this;
|
|
85
77
|
}
|
|
86
78
|
|
|
87
|
-
toObject(object) {
|
|
79
|
+
toObject(object: {x?: number; y?: number; z?: number; w?: number}): {
|
|
80
|
+
x: number;
|
|
81
|
+
y: number;
|
|
82
|
+
z: number;
|
|
83
|
+
w: number;
|
|
84
|
+
} {
|
|
88
85
|
object.x = this[0];
|
|
89
86
|
object.y = this[1];
|
|
90
87
|
object.z = this[2];
|
|
91
88
|
object.w = this[3];
|
|
92
|
-
return object
|
|
89
|
+
return object as {
|
|
90
|
+
x: number;
|
|
91
|
+
y: number;
|
|
92
|
+
z: number;
|
|
93
|
+
w: number;
|
|
94
|
+
};
|
|
93
95
|
}
|
|
94
96
|
|
|
95
97
|
// Getters/setters
|
|
96
98
|
/* eslint-disable no-multi-spaces, brace-style, no-return-assign */
|
|
97
|
-
get ELEMENTS() {
|
|
99
|
+
get ELEMENTS(): number {
|
|
98
100
|
return 4;
|
|
99
101
|
}
|
|
100
102
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
get z() {
|
|
103
|
+
get z(): number {
|
|
104
104
|
return this[2];
|
|
105
105
|
}
|
|
106
|
-
|
|
107
|
-
set z(value) {
|
|
106
|
+
set z(value: number) {
|
|
108
107
|
this[2] = checkNumber(value);
|
|
109
108
|
}
|
|
110
|
-
|
|
111
|
-
get w() {
|
|
109
|
+
get w(): number {
|
|
112
110
|
return this[3];
|
|
113
111
|
}
|
|
114
|
-
|
|
115
|
-
set w(value) {
|
|
112
|
+
set w(value: number) {
|
|
116
113
|
this[3] = checkNumber(value);
|
|
117
114
|
}
|
|
118
|
-
/* eslint-enable no-multi-spaces, brace-style, no-return-assign */
|
|
119
115
|
|
|
120
|
-
transform(matrix4) {
|
|
116
|
+
transform(matrix4: Readonly<NumericArray>): this {
|
|
121
117
|
vec4.transformMat4(this, this, matrix4);
|
|
122
118
|
return this.check();
|
|
123
119
|
}
|
|
124
120
|
|
|
125
|
-
transformByMatrix3(matrix3) {
|
|
121
|
+
transformByMatrix3(matrix3: Readonly<NumericArray>): this {
|
|
126
122
|
vec4_transformMat3(this, this, matrix3);
|
|
127
123
|
return this.check();
|
|
128
124
|
}
|
|
129
125
|
|
|
130
|
-
transformByMatrix2(matrix2) {
|
|
126
|
+
transformByMatrix2(matrix2: Readonly<NumericArray>): this {
|
|
131
127
|
vec4_transformMat2(this, this, matrix2);
|
|
132
128
|
return this.check();
|
|
133
129
|
}
|
|
134
130
|
|
|
135
|
-
transformByQuaternion(quaternion) {
|
|
131
|
+
transformByQuaternion(quaternion: Readonly<NumericArray>): this {
|
|
136
132
|
vec4.transformQuat(this, this, quaternion);
|
|
137
133
|
return this.check();
|
|
138
134
|
}
|
|
139
135
|
|
|
140
136
|
// three.js compatibility
|
|
141
|
-
applyMatrix4(m) {
|
|
137
|
+
applyMatrix4(m: Matrix4): this {
|
|
142
138
|
m.transform(this, this);
|
|
143
139
|
return this;
|
|
144
140
|
}
|
package/src/lib/common.ts
CHANGED
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
import {NumericArray} from '@math.gl/types';
|
|
4
4
|
import assert from './assert';
|
|
5
5
|
|
|
6
|
+
import type MathArray from '../classes/base/math-array';
|
|
7
|
+
|
|
6
8
|
export type ConfigurationOptions = {
|
|
7
9
|
EPSILON?: number;
|
|
8
10
|
debug?: boolean;
|
|
@@ -61,23 +63,22 @@ export function isArray(value: unknown): boolean {
|
|
|
61
63
|
return Array.isArray(value) || (ArrayBuffer.isView(value) && !(value instanceof DataView));
|
|
62
64
|
}
|
|
63
65
|
|
|
64
|
-
export function clone(array: NumericArray): NumericArray {
|
|
65
|
-
|
|
66
|
-
return 'clone' in array ? array.clone() : new Array(...array);
|
|
66
|
+
export function clone(array: NumericArray | MathArray): NumericArray {
|
|
67
|
+
return 'clone' in array ? array.clone() : array.slice();
|
|
67
68
|
}
|
|
68
69
|
|
|
69
70
|
export function toRadians(degrees: number): number;
|
|
70
71
|
export function toRadians(degrees: NumericArray): NumericArray;
|
|
71
72
|
|
|
72
|
-
export function toRadians(degrees):
|
|
73
|
-
return radians(degrees);
|
|
73
|
+
export function toRadians(degrees: number | NumericArray): number | NumericArray {
|
|
74
|
+
return radians(degrees as NumericArray);
|
|
74
75
|
}
|
|
75
76
|
|
|
76
77
|
export function toDegrees(degrees: number): number;
|
|
77
78
|
export function toDegrees(degrees: NumericArray): NumericArray;
|
|
78
79
|
|
|
79
|
-
export function toDegrees(radians):
|
|
80
|
-
return degrees(radians);
|
|
80
|
+
export function toDegrees(radians: number | NumericArray): number | NumericArray {
|
|
81
|
+
return degrees(radians as NumericArray);
|
|
81
82
|
}
|
|
82
83
|
|
|
83
84
|
// GLSL math function equivalents - Works on both single values and vectors
|
|
@@ -88,7 +89,10 @@ export function toDegrees(radians): any {
|
|
|
88
89
|
export function radians(degrees: number): number;
|
|
89
90
|
export function radians(degrees: NumericArray, result?: NumericArray): NumericArray;
|
|
90
91
|
|
|
91
|
-
export function radians(
|
|
92
|
+
export function radians(
|
|
93
|
+
degrees: number | NumericArray,
|
|
94
|
+
result?: NumericArray
|
|
95
|
+
): number | NumericArray {
|
|
92
96
|
return map(degrees, (degrees) => degrees * DEGREES_TO_RADIANS, result);
|
|
93
97
|
}
|
|
94
98
|
|
|
@@ -98,7 +102,10 @@ export function radians(degrees, result?) {
|
|
|
98
102
|
export function degrees(radians: number): number;
|
|
99
103
|
export function degrees(radians: NumericArray, result?: NumericArray): NumericArray;
|
|
100
104
|
|
|
101
|
-
export function degrees(
|
|
105
|
+
export function degrees(
|
|
106
|
+
radians: number | NumericArray,
|
|
107
|
+
result?: NumericArray
|
|
108
|
+
): number | NumericArray {
|
|
102
109
|
return map(radians, (radians) => radians * RADIANS_TO_DEGREES, result);
|
|
103
110
|
}
|
|
104
111
|
|
|
@@ -106,7 +113,7 @@ export function degrees(radians: number | NumericArray, result?) {
|
|
|
106
113
|
* "GLSL equivalent" of `Math.sin`: Works on single values and vectors
|
|
107
114
|
* @deprecated
|
|
108
115
|
*/
|
|
109
|
-
export function sin(radians:
|
|
116
|
+
export function sin(radians: number | NumericArray, result?: NumericArray): number | NumericArray {
|
|
110
117
|
return map(radians, (angle) => Math.sin(angle), result);
|
|
111
118
|
}
|
|
112
119
|
|
|
@@ -114,7 +121,7 @@ export function sin(radians: any, result?: any): any {
|
|
|
114
121
|
* "GLSL equivalent" of `Math.cos`: Works on single values and vectors
|
|
115
122
|
* @deprecated
|
|
116
123
|
*/
|
|
117
|
-
export function cos(radians: number | NumericArray, result
|
|
124
|
+
export function cos(radians: number | NumericArray, result?: NumericArray): number | NumericArray {
|
|
118
125
|
return map(radians, (angle) => Math.cos(angle), result);
|
|
119
126
|
}
|
|
120
127
|
|
|
@@ -122,51 +129,67 @@ export function cos(radians: number | NumericArray, result?) {
|
|
|
122
129
|
* "GLSL equivalent" of `Math.tan`: Works on single values and vectors
|
|
123
130
|
* @deprecated
|
|
124
131
|
*/
|
|
125
|
-
export function tan(radians: number | NumericArray, result
|
|
126
|
-
return map(radians, (angle) => Math.tan(angle));
|
|
132
|
+
export function tan(radians: number | NumericArray, result?: NumericArray): number | NumericArray {
|
|
133
|
+
return map(radians, (angle) => Math.tan(angle), result);
|
|
127
134
|
}
|
|
128
135
|
|
|
129
136
|
/**
|
|
130
137
|
* "GLSL equivalent" of `Math.asin`: Works on single values and vectors
|
|
131
138
|
* @deprecated
|
|
132
139
|
*/
|
|
133
|
-
export function asin(radians: number | NumericArray) {
|
|
134
|
-
return map(radians, (angle) => Math.asin(angle));
|
|
140
|
+
export function asin(radians: number | NumericArray, result?: NumericArray): number | NumericArray {
|
|
141
|
+
return map(radians, (angle) => Math.asin(angle), result);
|
|
135
142
|
}
|
|
136
143
|
|
|
137
144
|
/**
|
|
138
145
|
* "GLSL equivalent" of `Math.acos`: Works on single values and vectors
|
|
139
146
|
* @deprecated
|
|
140
147
|
*/
|
|
141
|
-
export function acos(radians: number | NumericArray) {
|
|
142
|
-
return map(radians, (angle) => Math.acos(angle));
|
|
148
|
+
export function acos(radians: number | NumericArray, result?: NumericArray): number | NumericArray {
|
|
149
|
+
return map(radians, (angle) => Math.acos(angle), result);
|
|
143
150
|
}
|
|
144
151
|
|
|
145
152
|
/**
|
|
146
153
|
* "GLSL equivalent" of `Math.atan`: Works on single values and vectors
|
|
147
154
|
* @deprecated
|
|
148
155
|
*/
|
|
149
|
-
export function atan(radians: number | NumericArray) {
|
|
150
|
-
return map(radians, (angle) => Math.atan(angle));
|
|
156
|
+
export function atan(radians: number | NumericArray, result?: NumericArray): number | NumericArray {
|
|
157
|
+
return map(radians, (angle) => Math.atan(angle), result);
|
|
151
158
|
}
|
|
152
159
|
|
|
153
160
|
/**
|
|
154
161
|
* GLSL style value clamping: Works on single values and vectors
|
|
155
162
|
*/
|
|
156
|
-
export function clamp(value: number
|
|
163
|
+
export function clamp(value: number, min: number, max: number): number;
|
|
164
|
+
export function clamp(value: NumericArray, min: number, max: number): NumericArray;
|
|
165
|
+
|
|
166
|
+
export function clamp(
|
|
167
|
+
value: number | NumericArray,
|
|
168
|
+
min: number,
|
|
169
|
+
max: number
|
|
170
|
+
): number | NumericArray {
|
|
157
171
|
return map(value, (value) => Math.max(min, Math.min(max, value)));
|
|
158
172
|
}
|
|
159
173
|
|
|
160
174
|
/**
|
|
161
175
|
* Interpolate between two numbers or two arrays
|
|
162
176
|
*/
|
|
163
|
-
export function lerp(a, b, t: number)
|
|
177
|
+
export function lerp(a: number, b: number, t: number): number;
|
|
178
|
+
export function lerp(a: NumericArray, b: NumericArray, t: number): NumericArray;
|
|
179
|
+
|
|
180
|
+
export function lerp(
|
|
181
|
+
a: number | NumericArray,
|
|
182
|
+
b: number | NumericArray,
|
|
183
|
+
t: number
|
|
184
|
+
): number | NumericArray {
|
|
164
185
|
if (isArray(a)) {
|
|
165
|
-
return a.map((ai, i) => lerp(ai, b[i], t));
|
|
186
|
+
return (a as NumericArray).map((ai: number, i: number) => lerp(ai, (b as NumericArray)[i], t));
|
|
166
187
|
}
|
|
167
|
-
return t * b + (1 - t) * a;
|
|
188
|
+
return t * (b as number) + (1 - t) * (a as number);
|
|
168
189
|
}
|
|
169
190
|
|
|
191
|
+
/* eslint-disable */
|
|
192
|
+
|
|
170
193
|
/**
|
|
171
194
|
* Compares any two math objects, using `equals` method if available.
|
|
172
195
|
* @param a
|
|
@@ -174,8 +197,7 @@ export function lerp(a, b, t: number) {
|
|
|
174
197
|
* @param epsilon
|
|
175
198
|
* @returns
|
|
176
199
|
*/
|
|
177
|
-
|
|
178
|
-
export function equals(a: unknown, b: unknown, epsilon?: number): boolean {
|
|
200
|
+
export function equals(a: any, b: any, epsilon?: number): boolean {
|
|
179
201
|
const oldEpsilon = config.EPSILON;
|
|
180
202
|
if (epsilon) {
|
|
181
203
|
config.EPSILON = epsilon;
|
|
@@ -185,11 +207,9 @@ export function equals(a: unknown, b: unknown, epsilon?: number): boolean {
|
|
|
185
207
|
return true;
|
|
186
208
|
}
|
|
187
209
|
if (isArray(a) && isArray(b)) {
|
|
188
|
-
// @ts-expect-error isArray has checked
|
|
189
210
|
if (a.length !== b.length) {
|
|
190
211
|
return false;
|
|
191
212
|
}
|
|
192
|
-
// @ts-expect-error isArray has checked
|
|
193
213
|
for (let i = 0; i < a.length; ++i) {
|
|
194
214
|
// eslint-disable-next-line max-depth
|
|
195
215
|
if (!equals(a[i], b[i])) {
|
|
@@ -198,14 +218,10 @@ export function equals(a: unknown, b: unknown, epsilon?: number): boolean {
|
|
|
198
218
|
}
|
|
199
219
|
return true;
|
|
200
220
|
}
|
|
201
|
-
// @ts-expect-error Dynamic testing
|
|
202
221
|
if (a && a.equals) {
|
|
203
|
-
// @ts-expect-error Dynamic testing
|
|
204
222
|
return a.equals(b);
|
|
205
223
|
}
|
|
206
|
-
// @ts-expect-error Dynamic testing
|
|
207
224
|
if (b && b.equals) {
|
|
208
|
-
// @ts-expect-error Dynamic testing
|
|
209
225
|
return b.equals(a);
|
|
210
226
|
}
|
|
211
227
|
if (typeof a === 'number' && typeof b === 'number') {
|
|
@@ -217,8 +233,7 @@ export function equals(a: unknown, b: unknown, epsilon?: number): boolean {
|
|
|
217
233
|
}
|
|
218
234
|
}
|
|
219
235
|
|
|
220
|
-
|
|
221
|
-
export function exactEquals(a, b): boolean {
|
|
236
|
+
export function exactEquals(a: any, b: any): boolean {
|
|
222
237
|
if (a === b) {
|
|
223
238
|
return true;
|
|
224
239
|
}
|
|
@@ -244,7 +259,9 @@ export function exactEquals(a, b): boolean {
|
|
|
244
259
|
return false;
|
|
245
260
|
}
|
|
246
261
|
|
|
247
|
-
|
|
262
|
+
/* eslint-enable */
|
|
263
|
+
|
|
264
|
+
export function withEpsilon(epsilon: number, func: () => any): any {
|
|
248
265
|
const oldPrecision = config.EPSILON;
|
|
249
266
|
config.EPSILON = epsilon;
|
|
250
267
|
let value;
|
|
@@ -265,12 +282,16 @@ function round(value: number): number {
|
|
|
265
282
|
// If the array has a clone function, calls it, otherwise returns a copy
|
|
266
283
|
function duplicateArray(array: NumericArray): NumericArray {
|
|
267
284
|
// @ts-expect-error We check for math.gl class methods
|
|
268
|
-
return array.clone ? array.clone() : new Array(array.length);
|
|
285
|
+
return array.clone ? array.clone() : (new Array(array.length) as number[]);
|
|
269
286
|
}
|
|
270
287
|
|
|
271
288
|
// If the argument value is an array, applies the func element wise,
|
|
272
289
|
// otherwise applies func to the argument value
|
|
273
|
-
function map(
|
|
290
|
+
function map(
|
|
291
|
+
value: number | NumericArray,
|
|
292
|
+
func: (x: number, index?: number, result?: NumericArray) => number,
|
|
293
|
+
result?: NumericArray
|
|
294
|
+
): number | NumericArray {
|
|
274
295
|
if (isArray(value)) {
|
|
275
296
|
const array = value as NumericArray;
|
|
276
297
|
result = result || duplicateArray(array);
|
|
@@ -279,5 +300,5 @@ function map(value: number | NumericArray, func: Function, result?) {
|
|
|
279
300
|
}
|
|
280
301
|
return result;
|
|
281
302
|
}
|
|
282
|
-
return func(value);
|
|
303
|
+
return func(value as number);
|
|
283
304
|
}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
/* eslint-disable camelcase */
|
|
2
|
+
import {NumericArray} from '@math.gl/types';
|
|
2
3
|
// vec2 additions
|
|
3
4
|
|
|
4
|
-
export function vec2_transformMat4AsVector
|
|
5
|
+
export function vec2_transformMat4AsVector<T extends NumericArray>(
|
|
6
|
+
out: T,
|
|
7
|
+
a: Readonly<NumericArray>,
|
|
8
|
+
m: Readonly<NumericArray>
|
|
9
|
+
): T {
|
|
5
10
|
const x = a[0];
|
|
6
11
|
const y = a[1];
|
|
7
12
|
const w = m[3] * x + m[7] * y || 1.0;
|
|
@@ -13,7 +18,11 @@ export function vec2_transformMat4AsVector(out, a, m) {
|
|
|
13
18
|
// vec3 additions
|
|
14
19
|
|
|
15
20
|
// Transform as vector, only uses 3x3 minor matrix
|
|
16
|
-
export function vec3_transformMat4AsVector
|
|
21
|
+
export function vec3_transformMat4AsVector<T extends NumericArray>(
|
|
22
|
+
out: T,
|
|
23
|
+
a: Readonly<NumericArray>,
|
|
24
|
+
m: Readonly<NumericArray>
|
|
25
|
+
): T {
|
|
17
26
|
const x = a[0];
|
|
18
27
|
const y = a[1];
|
|
19
28
|
const z = a[2];
|
|
@@ -24,7 +33,11 @@ export function vec3_transformMat4AsVector(out, a, m) {
|
|
|
24
33
|
return out;
|
|
25
34
|
}
|
|
26
35
|
|
|
27
|
-
export function vec3_transformMat2
|
|
36
|
+
export function vec3_transformMat2<T extends NumericArray>(
|
|
37
|
+
out: T,
|
|
38
|
+
a: Readonly<NumericArray>,
|
|
39
|
+
m: Readonly<NumericArray>
|
|
40
|
+
): T {
|
|
28
41
|
const x = a[0];
|
|
29
42
|
const y = a[1];
|
|
30
43
|
out[0] = m[0] * x + m[2] * y;
|
|
@@ -35,7 +48,11 @@ export function vec3_transformMat2(out, a, m) {
|
|
|
35
48
|
|
|
36
49
|
// vec4 additions
|
|
37
50
|
|
|
38
|
-
export function vec4_transformMat2
|
|
51
|
+
export function vec4_transformMat2<T extends NumericArray>(
|
|
52
|
+
out: T,
|
|
53
|
+
a: Readonly<NumericArray>,
|
|
54
|
+
m: Readonly<NumericArray>
|
|
55
|
+
): T {
|
|
39
56
|
const x = a[0];
|
|
40
57
|
const y = a[1];
|
|
41
58
|
out[0] = m[0] * x + m[2] * y;
|
|
@@ -45,7 +62,11 @@ export function vec4_transformMat2(out, a, m) {
|
|
|
45
62
|
return out;
|
|
46
63
|
}
|
|
47
64
|
|
|
48
|
-
export function vec4_transformMat3
|
|
65
|
+
export function vec4_transformMat3<T extends NumericArray>(
|
|
66
|
+
out: T,
|
|
67
|
+
a: Readonly<NumericArray>,
|
|
68
|
+
m: Readonly<NumericArray>
|
|
69
|
+
): T {
|
|
49
70
|
const x = a[0];
|
|
50
71
|
const y = a[1];
|
|
51
72
|
const z = a[2];
|