From 1d03d4c3ea5391a5c4f1d8b9ef5fa966ac62e052 Mon Sep 17 00:00:00 2001 From: bloeys Date: Fri, 5 Nov 2021 04:41:57 +0400 Subject: [PATCH] Mat3 mul --- gglm/mat2.go | 5 ++++- gglm/mat3.go | 17 +++++++++++++++++ main.go | 21 +++++++++++++++++++++ main_test.go | 8 ++++---- 4 files changed, 46 insertions(+), 5 deletions(-) diff --git a/gglm/mat2.go b/gglm/mat2.go index e8b847a..6c8954d 100755 --- a/gglm/mat2.go +++ b/gglm/mat2.go @@ -44,11 +44,12 @@ func (m *Mat2) Sub(m2 *Mat2) { m.Data[3] -= m2.Data[3] } -//Add m *= m2 +//Mul m *= m2 func (m *Mat2) Mul(m2 *Mat2) { m.Data = [4]float32{ 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[2]*m2.Data[0] + m.Data[3]*m2.Data[2], 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 { return &Mat2{ Data: [4]float32{ 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[2]*m2.Data[0] + m1.Data[3]*m2.Data[2], m1.Data[2]*m2.Data[1] + m1.Data[3]*m2.Data[3], }, diff --git a/gglm/mat3.go b/gglm/mat3.go index 150c24e..5ec2034 100755 --- a/gglm/mat3.go +++ b/gglm/mat3.go @@ -63,6 +63,23 @@ func (m *Mat3) Sub(m2 *Mat3) { 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) func (m *Mat3) Scale(x float32) { diff --git a/main.go b/main.go index da29a2c..89a0a8a 100755 --- a/main.go +++ b/main.go @@ -1,4 +1,25 @@ package main +import "github.com/bloeys/gglm/gglm" + 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()) } diff --git a/main_test.go b/main_test.go index 4c145e9..c764a2c 100755 --- a/main_test.go +++ b/main_test.go @@ -8,8 +8,8 @@ import ( func BenchmarkVec3Add(b *testing.B) { - v1 := gglm.NewMat2Id() - v2 := gglm.NewMat2Id() + v1 := gglm.NewMat3Id() + v2 := gglm.NewMat3Id() for i := 0; i < b.N; i++ { v1.Mul(v2) @@ -18,8 +18,8 @@ func BenchmarkVec3Add(b *testing.B) { func BenchmarkVec3Add2(b *testing.B) { - v1 := gglm.NewMat2Id() - v2 := gglm.NewMat2Id() + v1 := gglm.NewMat3Id() + v2 := gglm.NewMat3Id() for i := 0; i < b.N; i++ { v1.Mul(v2)