mirror of
https://github.com/bloeys/gglm.git
synced 2025-12-29 13:38: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
|
package gglm
|
||||||
|
|
||||||
|
type MatSize int
|
||||||
|
|
||||||
|
const (
|
||||||
|
MatSizeUnknown MatSize = iota
|
||||||
|
MatSize2x2
|
||||||
|
MatSize3x3
|
||||||
|
MatSize4x4
|
||||||
|
)
|
||||||
|
|
||||||
type Mat interface {
|
type Mat interface {
|
||||||
At(row, col int) float32
|
At(row, col int) float32
|
||||||
Set(row, col int, val 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
|
m.Data[row*2+col] = val
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Mat2) Size() int {
|
func (m *Mat2) Size() MatSize {
|
||||||
return 2
|
return MatSize2x2
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Mat2) String() string {
|
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])
|
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)
|
//Scale m *= x (element wise multiplication)
|
||||||
func (m *Mat2) Scale(x float32) {
|
func (m *Mat2) Scale(x float32) {
|
||||||
m.Data[0] *= x
|
m.Data[0] *= x
|
||||||
@ -37,6 +53,26 @@ func (m *Mat2) Scale(x float32) {
|
|||||||
m.Data[3] *= x
|
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
|
//NewMat2 returns the identity matrix if data=nil, otherwise data is used
|
||||||
//as the backing array.
|
//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()
|
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 {
|
func NewVec2(data []float32) *Vec2 {
|
||||||
|
|
||||||
if data == nil {
|
if data == nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user