about summary refs log tree commit diff
path: root/vector2D.go
blob: 6beedb2731b680a168549752cc8f7e26ac389cad (plain)
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
package structs

import (
	"math"
)

type Vec2 struct {
	X, Y float64
}

// newVec2 returns a new Vec2 using the given coordinates
func newVec2(x float64, y float64) *Vec2 {
	return &Vec2{
		X: x,
		Y: y,
	}
}

// creates a copy of the vector
func (v *Vec2) Copy() Vec2 {
	return Vec2{v.X, v.Y}
}

func (v *Vec2) Split() (x float64, y float64) {
	return v.X, v.Y
}

// changes the length of the vector to the length l
func (v *Vec2) SetLength(l float64) {
	var k = l / v.GetLength()
	var newV = v.Multiply(k)
	//	v = newV
	v.X, v.Y = newV.Split()
}

// changes the length of the vector to the length 1
func (v *Vec2) SetLengthOne() {
	v.SetLength(1)
}

// returns the direction Vector of this vector. This means a copy of this vector with a length of 1
func (v *Vec2) GetDirVector() Vec2 {
	var dirV = v.Copy()
	dirV.SetLengthOne()
	return dirV
}

// returns the length of the vector
func (v *Vec2) GetLength() float64 {
	return math.Sqrt(math.Pow(v.X, 2) + math.Pow(v.Y, 2))
}

// returns the product of the vector and a scalar s
func (v *Vec2) Multiply(s float64) Vec2 {
	return Vec2{v.X * s, v.Y * s}
}

// returns the quotient of the vector and a scalar s
func (v *Vec2) Divide(s float64) Vec2 {
	return Vec2{v.X / s, v.Y / s}
}

// returns the sum of this vector and the vector v2
func (v1 *Vec2) Add(v2 Vec2) Vec2 {
	return Vec2{v1.X + v2.X, v1.Y + v2.Y}
}

// returns the difference of this vector minus the vector v2
func (v1 *Vec2) Subtract(v2 Vec2) Vec2 {
	return Vec2{v1.X - v2.X, v1.Y - v2.Y}
}