mirror of
https://github.com/bloeys/gglm.git
synced 2025-12-29 05:28:20 +00:00
Vec2&Mat2 add/sub functions+mat size enum
This commit is contained in:
11
gglm/mat.go
11
gglm/mat.go
@ -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
|
||||
}
|
||||
|
||||
40
gglm/mat2.go
40
gglm/mat2.go
@ -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.
|
||||
//
|
||||
|
||||
10
gglm/vec2.go
10
gglm/vec2.go
@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user