mirror of
https://github.com/bloeys/gglm.git
synced 2025-12-29 13:38:20 +00:00
Fix Mat2 bug+Stringer interface
This commit is contained in:
24
gglm/mat2.go
24
gglm/mat2.go
@ -1,13 +1,21 @@
|
||||
package gglm
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"gonum.org/v1/gonum/blas/blas32"
|
||||
)
|
||||
|
||||
var _ fmt.Stringer = &Mat2{}
|
||||
|
||||
type Mat2 struct {
|
||||
*blas32.GeneralCols
|
||||
}
|
||||
|
||||
func (m *Mat2) String() string {
|
||||
return fmt.Sprintf("| %f %f |\n| %f %f |", m.Data[0], m.Data[2], m.Data[1], m.Data[3])
|
||||
}
|
||||
|
||||
func NewMat2(data []float32) *Mat2 {
|
||||
|
||||
if data == nil {
|
||||
@ -16,7 +24,13 @@ func NewMat2(data []float32) *Mat2 {
|
||||
panic("Data must be nil or size 4")
|
||||
}
|
||||
|
||||
gc := &blas32.GeneralCols{}
|
||||
gc := &blas32.GeneralCols{
|
||||
Rows: 2,
|
||||
Cols: 2,
|
||||
Stride: 2,
|
||||
Data: data,
|
||||
}
|
||||
|
||||
gc.From(blas32.General{
|
||||
Rows: 2,
|
||||
Cols: 2,
|
||||
@ -28,3 +42,11 @@ func NewMat2(data []float32) *Mat2 {
|
||||
GeneralCols: gc,
|
||||
}
|
||||
}
|
||||
|
||||
//NewMat2ID returns an identity Mat2
|
||||
func NewMat2ID() *Mat2 {
|
||||
return NewMat2([]float32{
|
||||
1, 0,
|
||||
0, 1,
|
||||
})
|
||||
}
|
||||
|
||||
@ -15,4 +15,11 @@ type Swizzle3 interface {
|
||||
Swizzle2
|
||||
Z() float32
|
||||
B() float32
|
||||
|
||||
// XYZ
|
||||
// YXZ
|
||||
// XZY
|
||||
// YZX
|
||||
// ZXY
|
||||
// ZYX
|
||||
}
|
||||
|
||||
35
gglm/vec2.go
35
gglm/vec2.go
@ -1,25 +1,18 @@
|
||||
package gglm
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"gonum.org/v1/gonum/blas/blas32"
|
||||
)
|
||||
|
||||
var _ Swizzle2 = &Vec2{}
|
||||
var _ fmt.Stringer = &Vec2{}
|
||||
|
||||
type Vec2 struct {
|
||||
*blas32.Vector
|
||||
}
|
||||
|
||||
func (v *Vec2) AddVec2(v2 *Vec2) {
|
||||
v.Data[0] += v2.Data[0]
|
||||
v.Data[1] += v2.Data[1]
|
||||
}
|
||||
|
||||
func (v *Vec2) Scale(x float32) {
|
||||
v.Data[0] *= x
|
||||
v.Data[1] *= x
|
||||
}
|
||||
|
||||
func (v *Vec2) X() float32 {
|
||||
return v.Data[0]
|
||||
}
|
||||
@ -36,6 +29,28 @@ func (v *Vec2) G() float32 {
|
||||
return v.Data[1]
|
||||
}
|
||||
|
||||
func (v *Vec2) String() string {
|
||||
return fmt.Sprintf("(%f, %f)", v.X(), v.Y())
|
||||
}
|
||||
|
||||
//Scale v *= x (element wise multiplication)
|
||||
func (v *Vec2) Scale(x float32) {
|
||||
v.Data[0] *= x
|
||||
v.Data[1] *= x
|
||||
}
|
||||
|
||||
//AddVec2 v += v2
|
||||
func (v *Vec2) AddVec2(v2 *Vec2) {
|
||||
v.Data[0] += v2.Data[0]
|
||||
v.Data[1] += v2.Data[1]
|
||||
}
|
||||
|
||||
//SubVec2 v -= v2
|
||||
func (v *Vec2) SubVec2(v2 *Vec2) {
|
||||
v.Data[0] -= v2.Data[0]
|
||||
v.Data[1] -= v2.Data[1]
|
||||
}
|
||||
|
||||
//Mag returns the magnitude of the vector
|
||||
func (v *Vec2) Mag() float32 {
|
||||
return blas32.Nrm2(*v.Vector)
|
||||
|
||||
Reference in New Issue
Block a user