-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathstd.vectors.library.plato
60 lines (41 loc) · 1.25 KB
/
std.vectors.library.plato
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
library Vector
{
Sum(v: Vector): Number
=> v.Reduce(0.0, (a, b) => a + b);
Count(v: UV): Integer
=> 2;
Count(v: UVW): Integer
=> 3;
Count(c: Complex): Integer
=> 2;
Count(v: Vector2D): Integer
=> 2;
Count(v: Vector3D): Integer
=> 3;
Count(v: Vector4D): Integer
=> 4;
At(v: UV, n: Integer): Number
=> n == 0 ? v.U : v.V;
At(v: UVW, n: Integer): Number
=> n == 0 ? v.U : n == 1 ? v.V : v.W;
At(c: Complex, n: Integer): Number
=> n == 0 ? c.Real : c.Imaginary;
At(v: Vector2D, n: Integer): Number
=> n == 0 ? v.X : v.Y;
At(v: Vector3D, n: Integer): Number
=> n == 0 ? v.X : n == 1 ? v.Y : v.Z;
At(v: Vector4D, n: Integer): Number
=> n == 0 ? v.X : n == 1 ? v.Y : n == 2 ? v.Z : v.W;
SumSquares(v: Vector): Number
=> v.Square.Sum;
MagnitudeSquared(v: Vector): Number
=> v.SumSquares;
Magnitude(v: Vector): Number
=> v.MagnitudeSquared.SquareRoot;
Dot(v1: Vector, v2: Vector): Number
=> (v1 * v2).Sum;
Normal(v: Vector): Vector
=> v / v.Magnitude;
Average(v: Vector): Number
=> v.Sum / v.Count;
}