Vec2&Mat2 add/sub functions+mat size enum

This commit is contained in:
bloeys
2021-11-04 22:49:20 +04:00
parent 0d64d16c17
commit 818bda4882
3 changed files with 58 additions and 3 deletions

View File

@ -1,7 +1,16 @@
package gglm
type MatSize int
const (
MatSizeUnknown MatSize = iota
MatSize2x2
MatSize3x3
MatSize4x4
)
type Mat interface {
At(row, col int) float32
Set(row, col int, val float32)
Size() int
Size() MatSize
}

View File

@ -21,14 +21,30 @@ func (m *Mat2) Set(row, col int, val float32) {
m.Data[row*2+col] = val
}
func (m *Mat2) Size() int {
return 2
func (m *Mat2) Size() MatSize {
return MatSize2x2
}
func (m *Mat2) String() string {
return fmt.Sprintf("| %f %f |\n| %f %f |", m.Data[0], m.Data[1], m.Data[2], m.Data[3])
}
//Add m += m2
func (m *Mat2) Add(m2 *Mat2) {
m.Data[0] += m2.Data[0]
m.Data[1] += m2.Data[1]
m.Data[2] += m2.Data[2]
m.Data[3] += m2.Data[3]
}
//Add m -= m2
func (m *Mat2) Sub(m2 *Mat2) {
m.Data[0] -= m2.Data[0]
m.Data[1] -= m2.Data[1]
m.Data[2] -= m2.Data[2]
m.Data[3] -= m2.Data[3]
}
//Scale m *= x (element wise multiplication)
func (m *Mat2) Scale(x float32) {
m.Data[0] *= x
@ -37,6 +53,26 @@ func (m *Mat2) Scale(x float32) {
m.Data[3] *= x
}
//AddMat2 m3 = m1 + m2
func AddMat2(m1, m2 *Mat2) *Mat2 {
return NewMat2([]float32{
m1.Data[0] + m2.Data[0],
m1.Data[1] + m2.Data[1],
m1.Data[2] + m2.Data[2],
m1.Data[3] + m2.Data[3],
})
}
//SubMat2 m3 = m1 - m2
func SubMat2(m1, m2 *Mat2) *Mat2 {
return NewMat2([]float32{
m1.Data[0] - m2.Data[0],
m1.Data[1] - m2.Data[1],
m1.Data[2] - m2.Data[2],
m1.Data[3] - m2.Data[3],
})
}
//NewMat2 returns the identity matrix if data=nil, otherwise data is used
//as the backing array.
//

View File

@ -60,6 +60,16 @@ func (v *Vec2) SqrMag() float32 {
return v.X()*v.X() + v.Y()*v.Y()
}
//AddVec2 v3 = v1 + v2
func AddVec2(v1 *Vec2, v2 *Vec2) *Vec2 {
return NewVec2([]float32{v1.X() + v2.X(), v1.Y() + v2.Y()})
}
//SubVec2 v3 = v1 + v2
func SubVec2(v1, v2 *Vec2) *Vec2 {
return NewVec2([]float32{v1.X() - v2.X(), v1.Y() - v2.Y()})
}
func NewVec2(data []float32) *Vec2 {
if data == nil {