37 lines
709 B
Go
37 lines
709 B
Go
package fluid
|
|
|
|
import "math"
|
|
|
|
type FieldVector struct {
|
|
X float32
|
|
Y float32
|
|
}
|
|
|
|
func (v FieldVector) DotProduct(p FieldVector) float32 {
|
|
return v.X*p.X + v.Y*p.Y
|
|
}
|
|
|
|
func (v FieldVector) Magnitude() float32 {
|
|
return float32(math.Sqrt(float64(v.X*v.X + v.Y*v.Y)))
|
|
}
|
|
|
|
func (v FieldVector) Add(p FieldVector) FieldVector {
|
|
return FieldVector{X: v.X + p.X, Y: v.Y + p.Y}
|
|
}
|
|
|
|
func (v FieldVector) Subtract(p FieldVector) FieldVector {
|
|
return FieldVector{X: v.X - p.X, Y: v.Y - p.Y}
|
|
}
|
|
|
|
func (v FieldVector) Scale(s float32) FieldVector {
|
|
return FieldVector{X: v.X * s, Y: v.Y * s}
|
|
}
|
|
|
|
func (v FieldVector) Normalize() FieldVector {
|
|
mag := v.Magnitude()
|
|
return FieldVector{
|
|
X: v.X / mag,
|
|
Y: v.Y / mag,
|
|
}
|
|
}
|