assimp中如何判断矩阵是否是单位矩阵

对于一个矩阵元素为浮点型的矩阵,你是否还在使每个元素跟1.0f或0.0f进行比较,如果这样,只能说你的结果不一定正确,那我们看看assimp中是如何做的。

cpp 复制代码
template <typename TReal>
AI_FORCE_INLINE
bool aiMatrix4x4t<TReal>::IsIdentity() const {
    // Use a small epsilon to solve floating-point inaccuracies
    const static TReal epsilon = 10e-3f;

    return (a2 <= epsilon && a2 >= -epsilon &&
            a3 <= epsilon && a3 >= -epsilon &&
            a4 <= epsilon && a4 >= -epsilon &&
            b1 <= epsilon && b1 >= -epsilon &&
            b3 <= epsilon && b3 >= -epsilon &&
            b4 <= epsilon && b4 >= -epsilon &&
            c1 <= epsilon && c1 >= -epsilon &&
            c2 <= epsilon && c2 >= -epsilon &&
            c4 <= epsilon && c4 >= -epsilon &&
            d1 <= epsilon && d1 >= -epsilon &&
            d2 <= epsilon && d2 >= -epsilon &&
            d3 <= epsilon && d3 >= -epsilon &&
            a1 <= 1.f+epsilon && a1 >= 1.f-epsilon &&
            b2 <= 1.f+epsilon && b2 >= 1.f-epsilon &&
            c3 <= 1.f+epsilon && c3 >= 1.f-epsilon &&
            d4 <= 1.f+epsilon && d4 >= 1.f-epsilon);
}

这里是定义了一个模板函数,对于矩阵元素为整型和浮点型都是可行的。

需要引起我们注意的是极小值epsilon的定义:

const static TReal epsilon = 10e-3f;

还有双向比较:

a2 <= epsilon && a2 >= -epsilon

a1 <= 1.f+epsilon && a1 >= 1.f-epsilon

从而保证了元素值为0.0f或1.0f。

相关推荐
盛世隐者1 天前
【线性代数】线性方程组与矩阵——行列式
线性代数
盛世隐者2 天前
【线性代数】线性方程组与矩阵——(1)线性方程组与矩阵初步
线性代数
夜斗小神社2 天前
【LeetCode 热题 100】(六)矩阵
算法·leetcode·矩阵
weixin_307779132 天前
C++实现MATLAB矩阵计算程序
开发语言·c++·算法·matlab·矩阵
盛世隐者2 天前
【线性代数】线性方程组与矩阵——(3)线性方程组解的结构
线性代数
盛世隐者2 天前
【线性代数】线性方程组与矩阵——(2)矩阵与线性方程组的解
线性代数
无水先生2 天前
特征值和特征向量的直觉
线性代数·矩阵
云云3212 天前
Lazada东南亚矩阵营销破局:指纹手机如何以“批量智控+数据中枢”重构运营生态
大数据·人工智能·线性代数·智能手机·矩阵·重构
卖报小郎君4 天前
双目标定中旋转矩阵参数应用及旋转角度计算(聚焦坐标系平行)
线性代数·矩阵·相机标定
ScilogyHunter4 天前
线性代数中矩阵的基本运算运算
线性代数·机器学习·矩阵