36#if MOCHI_ASSERT_VERBOSE_ENABLED
41 real constexpr kCloseEnough = 1e-4_r;
44 "Non-unit scale detected in 3x3 rotation matrix");
46 NearEqual(
Real3{0_r, 0_r, 0_r}, dot, kCloseEnough),
"Skew detected in 3x3 rotation matrix");
52 Real3 const& translation)
123 Vec4r(0_r, 0_r, 0_r, 1_r)};
#define MOCHI_ASSERT_VERBOSE(condition_without_side_effects,...)
T Dot(Simd< T, N > a, Simd< T, N > b)
Simd< T, 4 > ToSimd(NdArray< T, 2 > const &v, T z=T(0), T w=T(0))
NdArray< Simd< real, 4 >, 3 > VMatrix3x3r
Real3 ToReal3(Simd< T, 4 > v)
NdArray< Simd< T, 4 >, 3 > Transpose3x3(NdArray< Simd< T, 4 >, D0 > const &m)
V VNearEqual(V a, V b, V epsilon)
V Broadcast(typename V::Scalar a)
NdArray< Simd< real, 4 >, 4 > VMatrix4x4r
Simd< T, N > Blend(Simd< T, N > a, Simd< T, N > b)
TransformRT Invert(TransformRT const &a)
VMatrix4x4r ToVMatrix4x4(TransformRT const &a)
Simd< T, 4 > DotVecMat3x3(Simd< T, 4 > v, NdArray< Simd< T, 4 >, D0 > const &m)
VMatrix3x3r VGetRotationMatrix(TransformRT const &transform)
Simd< T, 4 > DotMatVec3x3(NdArray< Simd< T, 4 >, D0 > const &m, Simd< T, 4 > v)
MatrixTransformRT ToMatrixTransformRT(TransformRT const &a)
NdArray< real, 3, 3 > Matrix3x3r
VMatrix4x4r ToVMatrix4x4Transpose(TransformRT const &a)
bool NearEqual(TransformRT const &a, TransformRT const &b, real epsilon=kDefaultNearEqualEpsilon< real >)
Quaternion QuaternionFromMatrix(VMatrix3x3r const &matrix, real eps=1e-3_r)
Simd< T, 4 > ToSimdMatrix(NdArray< T, 2, 2 > const &m)
NdArray< Simd< T, 4 >, 3 > Dot3x3(NdArray< Simd< T, 4 >, D0A > const &a, NdArray< Simd< T, 4 >, D0B > const &b)
TransformRT ToTransformRT(MatrixTransformRT const &a)