2024-07-19 10:21:26 +03:00

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
}