-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathvector4.go
106 lines (90 loc) · 1.63 KB
/
vector4.go
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package math
type Vector4 struct {
X float32
Y float32
Z float32
W float32
}
func Vec4(x, y, z, w float32) Vector4 {
return Vector4{x, y, z, w}
}
func (vec *Vector4) Set(x, y, z, w float32) Vector4 {
vec.X = x
vec.Y = y
vec.Z = z
vec.W = w
return *vec
}
func (vec *Vector4) SetVec2(v Vector2) Vector4 {
vec.X = v.X
vec.Y = v.Y
return *vec
}
func (vec *Vector4) SetVec3(v Vector3) Vector4 {
vec.X = v.X
vec.Y = v.Y
vec.Z = v.Z
return *vec
}
func (vec Vector4) Vec2() Vector2 {
return Vec2(vec.X, vec.Y)
}
func (vec Vector4) Vec3() Vector3 {
return Vec3(vec.X, vec.Y, vec.Z)
}
func (vec Vector4) Cpy() Vector4 {
return Vector4{vec.X, vec.Y, vec.Z, vec.W}
}
// Returns a zero vector
func (vec Vector4) Clr() Vector4 {
vec.X = 0
vec.Y = 0
vec.Z = 0
vec.W = 0
return vec
}
func (vec Vector4) Add(vec2 Vector4) Vector4 {
vec.X += vec2.X
vec.Y += vec2.Y
vec.Z += vec2.Z
vec.W += vec2.W
return vec
}
func (vec Vector4) Sub(vec2 Vector4) Vector4 {
vec.X -= vec2.X
vec.Y -= vec2.Y
vec.Z -= vec2.Z
vec.W -= vec2.W
return vec
}
func (vec Vector4) Mul(vec2 Vector4) Vector4 {
vec.X *= vec2.X
vec.Y *= vec2.Y
vec.Z *= vec2.Z
vec.W *= vec2.W
return vec
}
func (vec Vector4) Div(vec2 Vector4) Vector4 {
vec.X /= vec2.X
vec.Y /= vec2.Y
vec.Z /= vec2.Z
vec.W /= vec2.W
return vec
}
func (vec Vector4) IsZero() bool {
return vec.X == 0 && vec.Y == 0 && vec.Z == 0 && vec.W == 0
}
func (vec Vector4) Scale(scalar float32) Vector4 {
vec.X *= scalar
vec.Y *= scalar
vec.Z *= scalar
vec.W *= scalar
return vec
}
func (vec Vector4) Invert() Vector4 {
vec.X = -vec.X
vec.Y = -vec.Y
vec.Z = -vec.Z
vec.W = -vec.W
return vec
}