forked from Tnze/go-mc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
vec2.go
66 lines (53 loc) · 976 Bytes
/
vec2.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
package maths
import (
"golang.org/x/exp/constraints"
"math"
)
type Vec2b = Vec2[int8]
type Vec2s = Vec2[int16]
type Vec2i = Vec2[int]
type Vec2f = Vec2[float32]
type Vec2d = Vec2[float64]
type Vec2[T constraints.Integer | constraints.Float] struct {
X, Y T // Yaw, Pitch
}
func (v *Vec2[T]) Set(v2 Vec2[T]) {
v.X = v2.X
v.Y = v2.Y
}
func (v *Vec2[T]) Add(v2 Vec2[T]) {
v.X += v2.X
v.Y += v2.Y
}
func (v *Vec2[T]) AddScalar(s T) {
v.X += s
v.Y += s
}
func (v *Vec2[T]) Sub(v2 Vec2[T]) {
v.X -= v2.X
v.Y -= v2.Y
}
func (v *Vec2[T]) SubScalar(s T) {
v.X -= s
v.Y -= s
}
func (v *Vec2[T]) Mul(v2 Vec2[T]) {
v.X *= v2.X
v.Y *= v2.Y
}
func (v *Vec2[T]) MulScalar(s T) {
v.X *= s
v.Y *= s
}
func (v *Vec2[T]) Div(v2 Vec2[T]) {
v.X /= v2.X
v.Y /= v2.Y
}
func (v *Vec2[T]) DivScalar(s T) {
v.X /= s
v.Y /= s
}
func (v *Vec2[T]) DistanceTo(v2 Vec2[T]) T {
xDiff, yDiff := v.X-v2.X, v.Y-v2.Y
return T(math.Sqrt(float64(xDiff*xDiff + yDiff*yDiff)))
}