carpy-breakout/pkg/math/math.go

64 lines
844 B
Go

package math
import (
"fmt"
"math"
"github.com/go-gl/mathgl/mgl32"
)
func AngleBetweenVectors(v1, v2 mgl32.Vec3) (float32, error) {
len1 := v1.LenSqr()
len2 := v2.LenSqr()
if len1 == 0 || len2 == 0 {
return 0.0, fmt.Errorf("AngleBetweenVectors given zero length vector")
}
if len1 != 1 {
v1 = v1.Normalize()
}
if len2 != 1 {
v2 = v2.Normalize()
}
dotProd := v1.Dot(v2)
angle := math.Acos(float64(dotProd))
return float32(angle), nil
}
func Maxf32(a, b float32) float32 {
if a >= b {
return a
} else {
return b
}
}
func Minf32(a, b float32) float32 {
if a <= b {
return a
} else {
return b
}
}
func Absf32(a float32) float32 {
if a < 0 {
a = a * -1
}
return a
}
func AbsVec3(v mgl32.Vec3) mgl32.Vec3 {
output := mgl32.Vec3{
Absf32(v[0]),
Absf32(v[1]),
Absf32(v[2]),
}
return output
}