24template<
typename T,
typename AngleT>
32template<
typename T,
typename AngleT>
39template<
typename T,
typename AngleT>
49 if (
sin <= std::numeric_limits<T>::epsilon()) {
70template<
typename T,
typename AngleT>
75 AngleT half_angle = axis_angle.
angle() / 2;
89template<
typename T,
typename AngleT>
96template<
typename T,
typename AngleT>
101 if (axis.x ==
T(1)) {
104 if (axis.y ==
T(1)) {
107 if (axis.z ==
T(1)) {
VecBase< float, D > normalize(VecOp< float, D >) RET
VecBase< float, 3 > cross(VecOp< float, 3 >, VecOp< float, 3 >) RET
T cos(const AngleRadianBase< T > &a)
QuaternionBase< T > to_quaternion(const AxisAngleBase< T, AngleT > &axis_angle)
T to_vector(const Axis axis)
QuaternionBase< T > normalize_and_get_length(const QuaternionBase< T > &q, T &out_length)
bool is_unit_scale(const MatBase< T, NumCol, NumRow > &m)
T dot(const QuaternionBase< T > &a, const QuaternionBase< T > &b)
T sin(const AngleRadianBase< T > &a)
VecBase< T, 3 > orthogonal(const VecBase< T, 3 > &v)
Euler3Base< T > to_euler(const AxisAngleBase< T, AngleT > &axis_angle, EulerOrder order)
static AxisAngleBase identity()
const AngleT & angle() const
const vec3_type & axis() const