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, } }