@aura3d/math 1.0.6

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 (97) hide show
  1. package/README.md +18 -0
  2. package/dist/Box3.d.ts +19 -0
  3. package/dist/Box3.d.ts.map +1 -0
  4. package/dist/Box3.js +61 -0
  5. package/dist/Box3.js.map +1 -0
  6. package/dist/Color.d.ts +15 -0
  7. package/dist/Color.d.ts.map +1 -0
  8. package/dist/Color.js +41 -0
  9. package/dist/Color.js.map +1 -0
  10. package/dist/Curves.d.ts +22 -0
  11. package/dist/Curves.d.ts.map +1 -0
  12. package/dist/Curves.js +74 -0
  13. package/dist/Curves.js.map +1 -0
  14. package/dist/Easing.d.ts +7 -0
  15. package/dist/Easing.d.ts.map +1 -0
  16. package/dist/Easing.js +24 -0
  17. package/dist/Easing.js.map +1 -0
  18. package/dist/Euler.d.ts +12 -0
  19. package/dist/Euler.d.ts.map +1 -0
  20. package/dist/Euler.js +30 -0
  21. package/dist/Euler.js.map +1 -0
  22. package/dist/Frustum.d.ts +14 -0
  23. package/dist/Frustum.d.ts.map +1 -0
  24. package/dist/Frustum.js +40 -0
  25. package/dist/Frustum.js.map +1 -0
  26. package/dist/Interpolation.d.ts +11 -0
  27. package/dist/Interpolation.d.ts.map +1 -0
  28. package/dist/Interpolation.js +30 -0
  29. package/dist/Interpolation.js.map +1 -0
  30. package/dist/Matrix3.d.ts +9 -0
  31. package/dist/Matrix3.d.ts.map +1 -0
  32. package/dist/Matrix3.js +51 -0
  33. package/dist/Matrix3.js.map +1 -0
  34. package/dist/Matrix4.d.ts +45 -0
  35. package/dist/Matrix4.d.ts.map +1 -0
  36. package/dist/Matrix4.js +204 -0
  37. package/dist/Matrix4.js.map +1 -0
  38. package/dist/Plane.d.ts +11 -0
  39. package/dist/Plane.d.ts.map +1 -0
  40. package/dist/Plane.js +31 -0
  41. package/dist/Plane.js.map +1 -0
  42. package/dist/Quaternion.d.ts +25 -0
  43. package/dist/Quaternion.d.ts.map +1 -0
  44. package/dist/Quaternion.js +121 -0
  45. package/dist/Quaternion.js.map +1 -0
  46. package/dist/Random.d.ts +9 -0
  47. package/dist/Random.d.ts.map +1 -0
  48. package/dist/Random.js +30 -0
  49. package/dist/Random.js.map +1 -0
  50. package/dist/Ray.d.ts +14 -0
  51. package/dist/Ray.d.ts.map +1 -0
  52. package/dist/Ray.js +67 -0
  53. package/dist/Ray.js.map +1 -0
  54. package/dist/Sphere.d.ts +9 -0
  55. package/dist/Sphere.d.ts.map +1 -0
  56. package/dist/Sphere.js +18 -0
  57. package/dist/Sphere.js.map +1 -0
  58. package/dist/Transform.d.ts +14 -0
  59. package/dist/Transform.d.ts.map +1 -0
  60. package/dist/Transform.js +28 -0
  61. package/dist/Transform.js.map +1 -0
  62. package/dist/Vector2.d.ts +22 -0
  63. package/dist/Vector2.d.ts.map +1 -0
  64. package/dist/Vector2.js +54 -0
  65. package/dist/Vector2.js.map +1 -0
  66. package/dist/Vector3.d.ts +34 -0
  67. package/dist/Vector3.d.ts.map +1 -0
  68. package/dist/Vector3.js +77 -0
  69. package/dist/Vector3.js.map +1 -0
  70. package/dist/Vector4.d.ts +19 -0
  71. package/dist/Vector4.d.ts.map +1 -0
  72. package/dist/Vector4.js +43 -0
  73. package/dist/Vector4.js.map +1 -0
  74. package/dist/index.d.ts +19 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +19 -0
  77. package/dist/index.js.map +1 -0
  78. package/package.json +13 -0
  79. package/src/Box3.ts +65 -0
  80. package/src/Color.ts +49 -0
  81. package/src/Curves.ts +79 -0
  82. package/src/Easing.ts +24 -0
  83. package/src/Euler.ts +30 -0
  84. package/src/Frustum.ts +43 -0
  85. package/src/Interpolation.ts +34 -0
  86. package/src/Matrix3.ts +54 -0
  87. package/src/Matrix4.ts +240 -0
  88. package/src/Plane.ts +34 -0
  89. package/src/Quaternion.ts +178 -0
  90. package/src/Random.ts +32 -0
  91. package/src/Ray.ts +67 -0
  92. package/src/Sphere.ts +18 -0
  93. package/src/Transform.ts +33 -0
  94. package/src/Vector2.ts +66 -0
  95. package/src/Vector3.ts +101 -0
  96. package/src/Vector4.ts +55 -0
  97. package/src/index.ts +18 -0
package/src/Ray.ts ADDED
@@ -0,0 +1,67 @@
1
+ import { Box3 } from "./Box3.js";
2
+ import { Plane } from "./Plane.js";
3
+ import { Sphere } from "./Sphere.js";
4
+ import { Vector3 } from "./Vector3.js";
5
+
6
+ export class Ray {
7
+ readonly origin: Vector3;
8
+ readonly direction: Vector3;
9
+
10
+ constructor(origin = Vector3.zero.clone(), direction = Vector3.forward.clone()) {
11
+ const normalized = direction.normalize();
12
+ if (normalized.lengthSquared() === 0) throw new RangeError("Ray direction must be non-zero.");
13
+ this.origin = origin;
14
+ this.direction = normalized;
15
+ }
16
+
17
+ at(distance: number): Vector3 {
18
+ return this.origin.add(this.direction.multiplyScalar(distance));
19
+ }
20
+
21
+ intersectPlane(plane: Plane): Vector3 | undefined {
22
+ const denominator = plane.normal.dot(this.direction);
23
+ if (Math.abs(denominator) < 1e-12) return undefined;
24
+ const distance = -(this.origin.dot(plane.normal) + plane.constant) / denominator;
25
+ return distance < 0 ? undefined : this.at(distance);
26
+ }
27
+
28
+ intersectSphere(sphere: Sphere): Vector3 | undefined {
29
+ const l = sphere.center.subtract(this.origin);
30
+ const tca = l.dot(this.direction);
31
+ const d2 = l.dot(l) - tca * tca;
32
+ const radius2 = sphere.radius * sphere.radius;
33
+ if (d2 > radius2) return undefined;
34
+ const thc = Math.sqrt(radius2 - d2);
35
+ const t0 = tca - thc;
36
+ const t1 = tca + thc;
37
+ const distance = t0 >= 0 ? t0 : t1;
38
+ return distance < 0 ? undefined : this.at(distance);
39
+ }
40
+
41
+ intersectBox(box: Box3): Vector3 | undefined {
42
+ if (box.isEmpty()) return undefined;
43
+ let tmin = Number.NEGATIVE_INFINITY;
44
+ let tmax = Number.POSITIVE_INFINITY;
45
+
46
+ for (const axis of ["x", "y", "z"] as const) {
47
+ const origin = this.origin[axis];
48
+ const direction = this.direction[axis];
49
+ const min = box.min[axis];
50
+ const max = box.max[axis];
51
+ if (Math.abs(direction) < 1e-12) {
52
+ if (origin < min || origin > max) return undefined;
53
+ continue;
54
+ }
55
+ const invD = 1 / direction;
56
+ let t1 = (min - origin) * invD;
57
+ let t2 = (max - origin) * invD;
58
+ if (t1 > t2) [t1, t2] = [t2, t1];
59
+ tmin = Math.max(tmin, t1);
60
+ tmax = Math.min(tmax, t2);
61
+ if (tmin > tmax) return undefined;
62
+ }
63
+
64
+ const distance = tmin >= 0 ? tmin : tmax;
65
+ return distance < 0 ? undefined : this.at(distance);
66
+ }
67
+ }
package/src/Sphere.ts ADDED
@@ -0,0 +1,18 @@
1
+ import { Vector3 } from "./Vector3.js";
2
+
3
+ export class Sphere {
4
+ constructor(
5
+ readonly center = Vector3.zero.clone(),
6
+ readonly radius = 0
7
+ ) {
8
+ if (!Number.isFinite(radius) || radius < 0) throw new RangeError("Sphere radius must be finite and non-negative.");
9
+ }
10
+
11
+ containsPoint(point: Vector3): boolean {
12
+ return this.center.distanceTo(point) <= this.radius;
13
+ }
14
+
15
+ intersectsSphere(other: Sphere): boolean {
16
+ return this.center.distanceTo(other.center) <= this.radius + other.radius;
17
+ }
18
+ }
@@ -0,0 +1,33 @@
1
+ import { Matrix4 } from "./Matrix4.js";
2
+ import { Quaternion } from "./Quaternion.js";
3
+ import { Vector3 } from "./Vector3.js";
4
+
5
+ export class Transform {
6
+ constructor(
7
+ readonly position = Vector3.zero.clone(),
8
+ readonly rotation = Quaternion.identity.clone(),
9
+ readonly scale = Vector3.one.clone()
10
+ ) {}
11
+
12
+ static identity(): Transform {
13
+ return new Transform();
14
+ }
15
+
16
+ toMatrix4(): Matrix4 {
17
+ return Matrix4.compose(this.position, this.rotation, this.scale);
18
+ }
19
+
20
+ combine(child: Transform): Transform {
21
+ const scaledPosition = child.position.multiply(this.scale);
22
+ const rotatedPosition = this.rotation.rotateVector(scaledPosition);
23
+ return new Transform(
24
+ this.position.add(rotatedPosition),
25
+ this.rotation.multiply(child.rotation).normalize(),
26
+ this.scale.multiply(child.scale)
27
+ );
28
+ }
29
+
30
+ transformPoint(point: Vector3): Vector3 {
31
+ return this.toMatrix4().transformPoint(point);
32
+ }
33
+ }
package/src/Vector2.ts ADDED
@@ -0,0 +1,66 @@
1
+ export class Vector2 {
2
+ static readonly zero = Object.freeze(new Vector2(0, 0));
3
+ static readonly one = Object.freeze(new Vector2(1, 1));
4
+
5
+ constructor(
6
+ readonly x = 0,
7
+ readonly y = 0
8
+ ) {}
9
+
10
+ clone(): Vector2 {
11
+ return new Vector2(this.x, this.y);
12
+ }
13
+
14
+ add(v: Vector2): Vector2 {
15
+ return new Vector2(this.x + v.x, this.y + v.y);
16
+ }
17
+
18
+ subtract(v: Vector2): Vector2 {
19
+ return new Vector2(this.x - v.x, this.y - v.y);
20
+ }
21
+
22
+ multiplyScalar(scalar: number): Vector2 {
23
+ return new Vector2(this.x * scalar, this.y * scalar);
24
+ }
25
+
26
+ divide(v: Vector2): Vector2 {
27
+ return new Vector2(this.x / v.x, this.y / v.y);
28
+ }
29
+
30
+ divideScalar(scalar: number): Vector2 {
31
+ return new Vector2(this.x / scalar, this.y / scalar);
32
+ }
33
+
34
+ dot(v: Vector2): number {
35
+ return this.x * v.x + this.y * v.y;
36
+ }
37
+
38
+ lengthSquared(): number {
39
+ return this.dot(this);
40
+ }
41
+
42
+ length(): number {
43
+ return Math.hypot(this.x, this.y);
44
+ }
45
+
46
+ normalize(): Vector2 {
47
+ const len = this.length();
48
+ return len === 0 ? Vector2.zero.clone() : this.multiplyScalar(1 / len);
49
+ }
50
+
51
+ distanceTo(v: Vector2): number {
52
+ return this.subtract(v).length();
53
+ }
54
+
55
+ lerp(v: Vector2, t: number): Vector2 {
56
+ return new Vector2(this.x + (v.x - this.x) * t, this.y + (v.y - this.y) * t);
57
+ }
58
+
59
+ equals(v: Vector2, epsilon = 1e-10): boolean {
60
+ return Math.abs(this.x - v.x) <= epsilon && Math.abs(this.y - v.y) <= epsilon;
61
+ }
62
+
63
+ toArray(): [number, number] {
64
+ return [this.x, this.y];
65
+ }
66
+ }
package/src/Vector3.ts ADDED
@@ -0,0 +1,101 @@
1
+ import type { Matrix4 } from "./Matrix4.js";
2
+ import type { Quaternion } from "./Quaternion.js";
3
+
4
+ export class Vector3 {
5
+ static readonly zero = Object.freeze(new Vector3(0, 0, 0));
6
+ static readonly one = Object.freeze(new Vector3(1, 1, 1));
7
+ static readonly up = Object.freeze(new Vector3(0, 1, 0));
8
+ static readonly right = Object.freeze(new Vector3(1, 0, 0));
9
+ static readonly forward = Object.freeze(new Vector3(0, 0, -1));
10
+
11
+ constructor(
12
+ readonly x = 0,
13
+ readonly y = 0,
14
+ readonly z = 0
15
+ ) {}
16
+
17
+ clone(): Vector3 {
18
+ return new Vector3(this.x, this.y, this.z);
19
+ }
20
+
21
+ add(v: Vector3): Vector3 {
22
+ return new Vector3(this.x + v.x, this.y + v.y, this.z + v.z);
23
+ }
24
+
25
+ subtract(v: Vector3): Vector3 {
26
+ return new Vector3(this.x - v.x, this.y - v.y, this.z - v.z);
27
+ }
28
+
29
+ multiplyScalar(scalar: number): Vector3 {
30
+ return new Vector3(this.x * scalar, this.y * scalar, this.z * scalar);
31
+ }
32
+
33
+ multiply(v: Vector3): Vector3 {
34
+ return new Vector3(this.x * v.x, this.y * v.y, this.z * v.z);
35
+ }
36
+
37
+ divide(v: Vector3): Vector3 {
38
+ return new Vector3(this.x / v.x, this.y / v.y, this.z / v.z);
39
+ }
40
+
41
+ divideScalar(scalar: number): Vector3 {
42
+ return new Vector3(this.x / scalar, this.y / scalar, this.z / scalar);
43
+ }
44
+
45
+ dot(v: Vector3): number {
46
+ return this.x * v.x + this.y * v.y + this.z * v.z;
47
+ }
48
+
49
+ cross(v: Vector3): Vector3 {
50
+ return new Vector3(
51
+ this.y * v.z - this.z * v.y,
52
+ this.z * v.x - this.x * v.z,
53
+ this.x * v.y - this.y * v.x
54
+ );
55
+ }
56
+
57
+ lengthSquared(): number {
58
+ return this.dot(this);
59
+ }
60
+
61
+ length(): number {
62
+ return Math.hypot(this.x, this.y, this.z);
63
+ }
64
+
65
+ normalize(): Vector3 {
66
+ const len = this.length();
67
+ return len === 0 ? Vector3.zero.clone() : this.multiplyScalar(1 / len);
68
+ }
69
+
70
+ distanceTo(v: Vector3): number {
71
+ return this.subtract(v).length();
72
+ }
73
+
74
+ lerp(v: Vector3, t: number): Vector3 {
75
+ return new Vector3(this.x + (v.x - this.x) * t, this.y + (v.y - this.y) * t, this.z + (v.z - this.z) * t);
76
+ }
77
+
78
+ transformMatrix4(matrix: Matrix4): Vector3 {
79
+ return matrix.transformPoint(this);
80
+ }
81
+
82
+ rotateByQuaternion(rotation: Quaternion): Vector3 {
83
+ return rotation.rotateVector(this);
84
+ }
85
+
86
+ min(v: Vector3): Vector3 {
87
+ return new Vector3(Math.min(this.x, v.x), Math.min(this.y, v.y), Math.min(this.z, v.z));
88
+ }
89
+
90
+ max(v: Vector3): Vector3 {
91
+ return new Vector3(Math.max(this.x, v.x), Math.max(this.y, v.y), Math.max(this.z, v.z));
92
+ }
93
+
94
+ equals(v: Vector3, epsilon = 1e-10): boolean {
95
+ return Math.abs(this.x - v.x) <= epsilon && Math.abs(this.y - v.y) <= epsilon && Math.abs(this.z - v.z) <= epsilon;
96
+ }
97
+
98
+ toArray(): [number, number, number] {
99
+ return [this.x, this.y, this.z];
100
+ }
101
+ }
package/src/Vector4.ts ADDED
@@ -0,0 +1,55 @@
1
+ import type { Matrix4 } from "./Matrix4.js";
2
+
3
+ export class Vector4 {
4
+ constructor(
5
+ readonly x = 0,
6
+ readonly y = 0,
7
+ readonly z = 0,
8
+ readonly w = 0
9
+ ) {}
10
+
11
+ add(v: Vector4): Vector4 {
12
+ return new Vector4(this.x + v.x, this.y + v.y, this.z + v.z, this.w + v.w);
13
+ }
14
+
15
+ subtract(v: Vector4): Vector4 {
16
+ return new Vector4(this.x - v.x, this.y - v.y, this.z - v.z, this.w - v.w);
17
+ }
18
+
19
+ multiplyScalar(scalar: number): Vector4 {
20
+ return new Vector4(this.x * scalar, this.y * scalar, this.z * scalar, this.w * scalar);
21
+ }
22
+
23
+ divide(v: Vector4): Vector4 {
24
+ return new Vector4(this.x / v.x, this.y / v.y, this.z / v.z, this.w / v.w);
25
+ }
26
+
27
+ divideScalar(scalar: number): Vector4 {
28
+ return new Vector4(this.x / scalar, this.y / scalar, this.z / scalar, this.w / scalar);
29
+ }
30
+
31
+ dot(v: Vector4): number {
32
+ return this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;
33
+ }
34
+
35
+ lerp(v: Vector4, t: number): Vector4 {
36
+ return new Vector4(
37
+ this.x + (v.x - this.x) * t,
38
+ this.y + (v.y - this.y) * t,
39
+ this.z + (v.z - this.z) * t,
40
+ this.w + (v.w - this.w) * t
41
+ );
42
+ }
43
+
44
+ transformMatrix4(matrix: Matrix4): Vector4 {
45
+ return matrix.transformVector4(this);
46
+ }
47
+
48
+ equals(v: Vector4, epsilon = 1e-10): boolean {
49
+ return Math.abs(this.x - v.x) <= epsilon && Math.abs(this.y - v.y) <= epsilon && Math.abs(this.z - v.z) <= epsilon && Math.abs(this.w - v.w) <= epsilon;
50
+ }
51
+
52
+ toArray(): [number, number, number, number] {
53
+ return [this.x, this.y, this.z, this.w];
54
+ }
55
+ }
package/src/index.ts ADDED
@@ -0,0 +1,18 @@
1
+ export * from "./Vector2.js";
2
+ export * from "./Vector3.js";
3
+ export * from "./Vector4.js";
4
+ export * from "./Matrix3.js";
5
+ export * from "./Matrix4.js";
6
+ export * from "./Quaternion.js";
7
+ export * from "./Euler.js";
8
+ export * from "./Color.js";
9
+ export * from "./Ray.js";
10
+ export * from "./Plane.js";
11
+ export * from "./Box3.js";
12
+ export * from "./Sphere.js";
13
+ export * from "./Frustum.js";
14
+ export * from "./Transform.js";
15
+ export * from "./Interpolation.js";
16
+ export * from "./Easing.js";
17
+ export * from "./Random.js";
18
+ export * from "./Curves.js";