DotVec3+Cross product

This commit is contained in:
bloeys
2021-11-05 02:20:35 +04:00
parent 21586408ea
commit 6999376c6b
2 changed files with 42 additions and 5 deletions

View File

@ -1,5 +1,35 @@
package gglm
func DotVec2(v1 *Vec2, v2 *Vec2) float32 {
import "gonum.org/v1/gonum/blas/blas32"
func DotVec2(v1, v2 *Vec2) float32 {
return v1.X()*v2.X() + v1.Y()*v2.Y()
}
func DotVec3(v1, v2 *Vec3) float32 {
return v1.X()*v2.X() + v1.Y()*v2.Y() + v1.Z()*v2.Z()
}
func Cross(v1, v2 *Vec3) *Vec3 {
// x = a[1]*b[2] - a[2]*b[1]
// y = a[2]*b[0] - a[0]*b[2]
// z = a[0]*b[1] - a[1]*b[0]
//Note: It's done this way to get inlining. Any small changes
//break inlining so check before any changes.
f := [3]float32{
v1.Arr[1]*v2.Arr[2] - v1.Arr[2]*v2.Arr[1],
v1.Arr[2]*v2.Arr[0] - v1.Arr[0]*v2.Arr[2],
v1.Arr[0]*v2.Arr[1] - v1.Arr[1]*v2.Arr[0],
}
return &Vec3{
Arr: f,
Vector: &blas32.Vector{
N: 3,
Inc: 1,
Data: f[:],
},
}
}

15
main.go
View File

@ -23,12 +23,19 @@ func main() {
0, 0, 0, 0,
}
m2 := gglm.NewMat4(f)
println("m1:", m1.String())
println("m2:", m2.String())
m3 := gglm.AddMat4(m1, m2)
m2.Add(m3)
println("m1:", m1.String())
println("m2:", m2.String())
println("m3:", m3.String())
v1 := gglm.NewVec3([]float32{5, 4, 2})
v2 := gglm.NewVec3([]float32{32, 10, 9})
cp := gglm.Cross(v1, v2)
dp := gglm.DotVec3(v1, v2)
println(cp.String())
println(dp)
}