33 lines
1011 B
Go
33 lines
1011 B
Go
package threedb
|
|
|
|
import (
|
|
"fmt"
|
|
"slices"
|
|
)
|
|
|
|
type Vector [3]float32
|
|
|
|
func (m Vector) X() float32 { return m[0] }
|
|
func (m Vector) Y() float32 { return m[1] }
|
|
func (m Vector) Z() float32 { return m[2] }
|
|
func (m *Vector) Set(x, y, z float32) { m[0], m[1], m[2] = x, y, z }
|
|
func (m *Vector) SetX(x float32) { m[0] = x }
|
|
func (m *Vector) SetY(y float32) { m[1] = y }
|
|
func (m *Vector) SetZ(z float32) { m[2] = z }
|
|
func (m Vector) String() string { return fmt.Sprintf("x:%f,y:%f,z:%f", m[0], m[1], m[2]) }
|
|
|
|
func (m Vector) Transform(scale float32) Vector {
|
|
return Vector{(m[0] - .5) * scale, (m[1] - .5) * scale, (m[2] - .5) * scale}
|
|
}
|
|
|
|
func (m Vector) Normalize() Vector {
|
|
return Vector{m[0] * -1, m[1] * -1, m[2]}
|
|
}
|
|
|
|
func (m Vector) Min() float32 { return slices.Min([]float32{m[0], m[1], m[2]}) }
|
|
func (m Vector) Max() float32 { return slices.Max([]float32{m[0], m[1], m[2]}) }
|
|
|
|
func (m Vector) MarshalText() ([]byte, error) {
|
|
return []byte(m.String()), nil
|
|
}
|