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 }