Fix Mat2 bug+Stringer interface

This commit is contained in:
bloeys
2021-11-01 09:50:07 +04:00
parent 0f9d41b3a3
commit cdff900307
4 changed files with 59 additions and 11 deletions

View File

@ -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,
})
}

View File

@ -15,4 +15,11 @@ type Swizzle3 interface {
Swizzle2
Z() float32
B() float32
// XYZ
// YXZ
// XZY
// YZX
// ZXY
// ZYX
}

View File

@ -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)

View File

@ -1,6 +1,8 @@
package main
import (
"fmt"
"github.com/bloeys/gglm/gglm"
)
@ -9,4 +11,6 @@ func main() {
v := gglm.NewVec2([]float32{4, 5})
println(v.Mag())
println(v.SqrMag())
fmt.Println(gglm.NewMat2ID())
fmt.Println(v)
}