github.com/xlab/linmath@v0.0.0-20220922225318-40b6290c3b40/vec2.go (about) 1 package linmath 2 3 type Vec2 [2]float32 4 5 func (r *Vec2) Add(a, b *Vec2) { 6 for i := 0; i < 2; i++ { 7 r[i] = a[i] + b[i] 8 } 9 } 10 11 func (r *Vec2) Sub(a, b *Vec2) { 12 for i := 0; i < 2; i++ { 13 r[i] = a[i] - b[i] 14 } 15 } 16 17 func (r *Vec2) Scale(v *Vec2, s float32) { 18 for i := 0; i < 2; i++ { 19 r[i] = v[i] * s 20 } 21 } 22 23 func (v *Vec2) Len() float32 { 24 return sqrtf(Vec2MultInner(v, v)) 25 } 26 27 func (r *Vec2) Norm(v *Vec2) { 28 var k float32 = 1.0 / v.Len() 29 r.Scale(v, k) 30 } 31 32 func (r *Vec2) Min(a, b *Vec2) { 33 for i := 0; i < 2; i++ { 34 if a[i] < b[i] { 35 r[i] = a[i] 36 } else { 37 r[i] = b[i] 38 } 39 } 40 } 41 42 func (r *Vec2) Max(a, b *Vec2) { 43 for i := 0; i < 2; i++ { 44 if a[i] > b[i] { 45 r[i] = a[i] 46 } else { 47 r[i] = b[i] 48 } 49 } 50 } 51 52 func Vec2MultInner(a, b *Vec2) (p float32) { 53 for i := 0; i < 2; i++ { 54 p += b[i] * a[i] 55 } 56 return p 57 }