MCPcopy Create free account
hub / github.com/ThatOpen/engine_clay / Vector

Class Vector

packages/clay/src/utils/vector.ts:1–71  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1export class Vector {
2 static get up() {
3 return [0, 1, 0];
4 }
5
6 static round(vector: number[], precission = 1000) {
7 return [
8 Math.round(vector[0] * precission) / precission,
9 Math.round(vector[1] * precission) / precission,
10 Math.round(vector[2] * precission) / precission,
11 ];
12 }
13
14 static getNormal(points: number[][]) {
15 const a = Vector.subtract(points[0], points[1]);
16 const b = Vector.subtract(points[1], points[2]);
17
18 const [x, y, z] = this.multiply(a, b);
19
20 const magnitude = Math.sqrt(x * x + y * y + z * z);
21
22 return [x / magnitude, y / magnitude, z / magnitude];
23 }
24
25 static dot(v1: number[], v2: number[]) {
26 return v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2];
27 }
28
29 static multiply(v1: number[], v2: number[]) {
30 const x = v1[1] * v2[2] - v1[2] * v2[1];
31 const y = v1[2] * v2[0] - v1[0] * v2[2];
32 const z = v1[0] * v2[1] - v1[1] * v2[0];
33 return [x, y, z];
34 }
35
36 static normalize(vector: number[]) {
37 const [x, y, z] = vector;
38 const magnitude = Vector.magnitude(vector);
39 return [x / magnitude, y / magnitude, z / magnitude];
40 }
41
42 static magnitude(vector: number[]) {
43 const [x, y, z] = vector;
44 return Math.sqrt(x * x + y * y + z * z);
45 }
46
47 static squaredMagnitude(vector: number[]) {
48 const [x, y, z] = vector;
49 return x * x + y * y + z * z;
50 }
51
52 static add(...vectors: number[][]) {
53 const result = [0, 0, 0];
54 for (const vector of vectors) {
55 result[0] += vector[0];
56 result[1] += vector[1];
57 result[2] += vector[2];
58 }
59 return result as [number, number, number];
60 }

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected