func (q1 Quat) Norm() float64 {
	return q1.Len()
}
Norm is an alias for Len() since both are very common terms.
package mgl64
import (
	"math"
)
type RotationOrder int
const (
	XYX RotationOrder = iota
	XYZ
	XZX
	XZY
	YXY
	YXZ
	YZY
	YZX
	ZYZ
	ZYX
	ZXZ
	ZXY
)
type Quat struct {
	W float64
	V Vec3
}
func QuatIdent() Quat {
	return Quat{1., Vec3{0, 0, 0}}
}
func QuatRotate(angle float64, axis Vec3) Quat {
	c, s := float64(math.Cos(float64(angle/2))), float64(math.Sin(float64(angle/2)))
	return Quat{c, axis.Mul(s)}
}
func (q Quat) X() float64 {
	return q.V[0]
}
func (q Quat) Y() float64 {
	return q.V[1]
}
func (q Quat) Z() float64 {
	return q.V[2]
}
func (q1 Quat) Add(q2 Quat) Quat {
	return Quat{q1.W + q2.W, q1.V.Add(q2.V)}
}
func (q1 Quat) Sub(q2 Quat) Quat {
	return Quat{q1.W - q2.W, q1.V.Sub(q2.V)}
}
func (q1 Quat) Mul(q2 Quat) Quat {
	return Quat{q1.W*q2.W - q1.V.Dot(q2.V), q1.V.Cross(q2.V).Add(q2.V.Mul(q1.W)).Add(q1.V.Mul(q2.W))}
}
func (q1 Quat) Scale(c float64) Quat {
	return Quat{q1.W * c, Vec3{q1.V[0] * c, q1.V[1] * c, q1.V[2] * c}}
}
func (q1 Quat) Conjugate() Quat {
	return Quat{q1.W, q1.V.Mul(-1)}
}
func (q1 Quat) Len() float64 {
	return float64(math.Sqrt(float64(q1.W*q1.W + q1.V[0]*q1.V[0] + q1.V[1]*q1.V[1] + q1.V[2]*q1.V[2])))
}