64 lines
844 B
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
|
|
}
|