mirror of
https://github.com/bloeys/gglm.git
synced 2025-12-29 13:38:20 +00:00
Mat3 mul
This commit is contained in:
@ -44,11 +44,12 @@ func (m *Mat2) Sub(m2 *Mat2) {
|
|||||||
m.Data[3] -= m2.Data[3]
|
m.Data[3] -= m2.Data[3]
|
||||||
}
|
}
|
||||||
|
|
||||||
//Add m *= m2
|
//Mul m *= m2
|
||||||
func (m *Mat2) Mul(m2 *Mat2) {
|
func (m *Mat2) Mul(m2 *Mat2) {
|
||||||
m.Data = [4]float32{
|
m.Data = [4]float32{
|
||||||
m.Data[0]*m2.Data[0] + m.Data[1]*m2.Data[2],
|
m.Data[0]*m2.Data[0] + m.Data[1]*m2.Data[2],
|
||||||
m.Data[0]*m2.Data[1] + m.Data[1]*m2.Data[3],
|
m.Data[0]*m2.Data[1] + m.Data[1]*m2.Data[3],
|
||||||
|
|
||||||
m.Data[2]*m2.Data[0] + m.Data[3]*m2.Data[2],
|
m.Data[2]*m2.Data[0] + m.Data[3]*m2.Data[2],
|
||||||
m.Data[2]*m2.Data[1] + m.Data[3]*m2.Data[3],
|
m.Data[2]*m2.Data[1] + m.Data[3]*m2.Data[3],
|
||||||
}
|
}
|
||||||
@ -86,11 +87,13 @@ func SubMat2(m1, m2 *Mat2) *Mat2 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//MulMat2 m3 = m1 * m2
|
||||||
func MulMat2(m1, m2 *Mat2) *Mat2 {
|
func MulMat2(m1, m2 *Mat2) *Mat2 {
|
||||||
return &Mat2{
|
return &Mat2{
|
||||||
Data: [4]float32{
|
Data: [4]float32{
|
||||||
m1.Data[0]*m2.Data[0] + m1.Data[1]*m2.Data[2],
|
m1.Data[0]*m2.Data[0] + m1.Data[1]*m2.Data[2],
|
||||||
m1.Data[0]*m2.Data[1] + m1.Data[1]*m2.Data[3],
|
m1.Data[0]*m2.Data[1] + m1.Data[1]*m2.Data[3],
|
||||||
|
|
||||||
m1.Data[2]*m2.Data[0] + m1.Data[3]*m2.Data[2],
|
m1.Data[2]*m2.Data[0] + m1.Data[3]*m2.Data[2],
|
||||||
m1.Data[2]*m2.Data[1] + m1.Data[3]*m2.Data[3],
|
m1.Data[2]*m2.Data[1] + m1.Data[3]*m2.Data[3],
|
||||||
},
|
},
|
||||||
|
|||||||
17
gglm/mat3.go
17
gglm/mat3.go
@ -63,6 +63,23 @@ func (m *Mat3) Sub(m2 *Mat3) {
|
|||||||
m.Data[8] -= m2.Data[8]
|
m.Data[8] -= m2.Data[8]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Mul m *= m2
|
||||||
|
func (m *Mat3) Mul(m2 *Mat3) {
|
||||||
|
m.Data = [9]float32{
|
||||||
|
m.Data[0]*m2.Data[0] + m.Data[1]*m2.Data[3] + m.Data[2]*m2.Data[6],
|
||||||
|
m.Data[0]*m2.Data[1] + m.Data[1]*m2.Data[4] + m.Data[2]*m2.Data[7],
|
||||||
|
m.Data[0]*m2.Data[2] + m.Data[1]*m2.Data[5] + m.Data[2]*m2.Data[8],
|
||||||
|
|
||||||
|
m.Data[3]*m2.Data[0] + m.Data[4]*m2.Data[3] + m.Data[5]*m2.Data[6],
|
||||||
|
m.Data[3]*m2.Data[1] + m.Data[4]*m2.Data[4] + m.Data[5]*m2.Data[7],
|
||||||
|
m.Data[3]*m2.Data[2] + m.Data[4]*m2.Data[5] + m.Data[5]*m2.Data[8],
|
||||||
|
|
||||||
|
m.Data[6]*m2.Data[0] + m.Data[7]*m2.Data[3] + m.Data[8]*m2.Data[6],
|
||||||
|
m.Data[6]*m2.Data[1] + m.Data[7]*m2.Data[4] + m.Data[8]*m2.Data[7],
|
||||||
|
m.Data[6]*m2.Data[2] + m.Data[7]*m2.Data[5] + m.Data[8]*m2.Data[8],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//Scale m *= x (element wise multiplication)
|
//Scale m *= x (element wise multiplication)
|
||||||
func (m *Mat3) Scale(x float32) {
|
func (m *Mat3) Scale(x float32) {
|
||||||
|
|
||||||
|
|||||||
21
main.go
21
main.go
@ -1,4 +1,25 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
|
import "github.com/bloeys/gglm/gglm"
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
|
m1 := &gglm.Mat3{
|
||||||
|
Data: [9]float32{
|
||||||
|
1, 2, 3,
|
||||||
|
4, 5, 6,
|
||||||
|
7, 8, 9,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
m2 := &gglm.Mat3{
|
||||||
|
Data: [9]float32{
|
||||||
|
1, 2, 3,
|
||||||
|
1, 2, 3,
|
||||||
|
1, 2, 3,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
m1.Mul(m2)
|
||||||
|
println(m1.String())
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,8 +8,8 @@ import (
|
|||||||
|
|
||||||
func BenchmarkVec3Add(b *testing.B) {
|
func BenchmarkVec3Add(b *testing.B) {
|
||||||
|
|
||||||
v1 := gglm.NewMat2Id()
|
v1 := gglm.NewMat3Id()
|
||||||
v2 := gglm.NewMat2Id()
|
v2 := gglm.NewMat3Id()
|
||||||
|
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
v1.Mul(v2)
|
v1.Mul(v2)
|
||||||
@ -18,8 +18,8 @@ func BenchmarkVec3Add(b *testing.B) {
|
|||||||
|
|
||||||
func BenchmarkVec3Add2(b *testing.B) {
|
func BenchmarkVec3Add2(b *testing.B) {
|
||||||
|
|
||||||
v1 := gglm.NewMat2Id()
|
v1 := gglm.NewMat3Id()
|
||||||
v2 := gglm.NewMat2Id()
|
v2 := gglm.NewMat3Id()
|
||||||
|
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
v1.Mul(v2)
|
v1.Mul(v2)
|
||||||
|
|||||||
Reference in New Issue
Block a user