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  }