mirror of
https://github.com/bloeys/gglm.git
synced 2025-12-29 05:28:20 +00:00
DotVec3+Cross product
This commit is contained in:
@ -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
15
main.go
@ -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)
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user