-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathswizzle.go
129 lines (101 loc) · 3.32 KB
/
swizzle.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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package govec
// V2F
// SwizzleYZ returns a new V2F with the X and Y components swapped.
func (v V2F[T]) SwizzleYZ() V2F[T] {
return V2F[T]{X: v.Y, Y: v.X}
}
// SwizzleInPlaceYZ swaps the X and Y components of the V2F in place.
func (v V2F[T]) SwizzleInPlaceYZ() {
v.X, v.Y = v.Y, v.X
}
// V3F
// SwizzleXZY returns a new V3F with components swapped: X->X Z->Y Y->Z
func (v V3F[T]) SwizzleXZY() V3F[T] {
return V3F[T]{X: v.X, Y: v.Z, Z: v.Y}
}
// SwizzleInPlaceXZY swaps components in place: X->X Z->Y Y->Z
func (v V3F[T]) SwizzleInPlaceXZY() {
v.Y, v.Z = v.Z, v.Y
}
// SwizzleYXZ returns a new V3F with components swapped: Y->X X->Y Z->Z
func (v V3F[T]) SwizzleYXZ() V3F[T] {
return V3F[T]{X: v.Y, Y: v.X, Z: v.Z}
}
// SwizzleInPlaceYXZ swaps components in place: Y->X X->Y Z->Z
func (v V3F[T]) SwizzleInPlaceYXZ() {
v.X, v.Y = v.Y, v.X
}
// SwizzleYZX returns a new V3F with components swapped: Y->X Z->Y X->Z
func (v V3F[T]) SwizzleYZX() V3F[T] {
return V3F[T]{X: v.Y, Y: v.Z, Z: v.X}
}
// SwizzleInPlaceYZX swaps components in place: Y->X Z->Y X->Z
func (v V3F[T]) SwizzleInPlaceYZX() {
v.X, v.Y, v.Z = v.Y, v.Z, v.X
}
// SwizzleZXY returns a new V3F with components swapped: Z->X X->Y Y->Z
func (v V3F[T]) SwizzleZXY() V3F[T] {
return V3F[T]{X: v.Z, Y: v.X, Z: v.Y}
}
// SwizzleInPlaceZXY swaps components in place: Z->X X->Y Y->Z
func (v V3F[T]) SwizzleInPlaceZXY() {
v.X, v.Y, v.Z = v.Z, v.X, v.Y
}
// SwizzleZYX returns a new V3F with components swapped: Z->X Y->Y X->Z
func (v V3F[T]) SwizzleZYX() V3F[T] {
return V3F[T]{X: v.Z, Y: v.Y, Z: v.X}
}
// SwizzleInPlaceZYX swaps components in place: Z->X Y->Y X->Z
func (v V3F[T]) SwizzleInPlaceZYX() {
v.X, v.Z = v.Z, v.X
}
// V2I
// SwizzleYZ returns a new V2I with the X and Y components swapped.
func (v V2I[T]) SwizzleYZ() V2I[T] {
return V2I[T]{X: v.Y, Y: v.X}
}
// SwizzleInPlaceYZ swaps the X and Y components of the V2I in place.
func (v V2I[T]) SwizzleInPlaceYZ() {
v.X, v.Y = v.Y, v.X
}
// V3I
// SwizzleXZY returns a new V3I with components swapped: X->X Z->Y Y->Z
func (v V3I[T]) SwizzleXZY() V3I[T] {
return V3I[T]{X: v.X, Y: v.Z, Z: v.Y}
}
// SwizzleInPlaceXZY swaps components in place: X->X Z->Y Y->Z
func (v V3I[T]) SwizzleInPlaceXZY() {
v.Y, v.Z = v.Z, v.Y
}
// SwizzleYXZ returns a new V3I with components swapped: Y->X X->Y Z->Z
func (v V3I[T]) SwizzleYXZ() V3I[T] {
return V3I[T]{X: v.Y, Y: v.X, Z: v.Z}
}
// SwizzleInPlaceYXZ swaps components in place: Y->X X->Y Z->Z
func (v V3I[T]) SwizzleInPlaceYXZ() {
v.X, v.Y = v.Y, v.X
}
// SwizzleYZX returns a new V3I with components swapped: Y->X Z->Y X->Z
func (v V3I[T]) SwizzleYZX() V3I[T] {
return V3I[T]{X: v.Y, Y: v.Z, Z: v.X}
}
// SwizzleInPlaceYZX swaps components in place: Y->X Z->Y X->Z
func (v V3I[T]) SwizzleInPlaceYZX() {
v.X, v.Y, v.Z = v.Y, v.Z, v.X
}
// SwizzleZXY returns a new V3I with components swapped: Z->X X->Y Y->Z
func (v V3I[T]) SwizzleZXY() V3I[T] {
return V3I[T]{X: v.Z, Y: v.X, Z: v.Y}
}
// SwizzleInPlaceZXY swaps components in place: Z->X X->Y Y->Z
func (v V3I[T]) SwizzleInPlaceZXY() {
v.X, v.Y, v.Z = v.Z, v.X, v.Y
}
// SwizzleZYX returns a new V3I with components swapped: Z->X Y->Y X->Z
func (v V3I[T]) SwizzleZYX() V3I[T] {
return V3I[T]{X: v.Z, Y: v.Y, Z: v.X}
}
// SwizzleInPlaceZYX swaps components in place: Z->X Y->Y X->Z
func (v V3I[T]) SwizzleInPlaceZYX() {
v.X, v.Z = v.Z, v.X
}