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。

相关推荐
前端炒粉21 小时前
18.矩阵置零(原地算法)
javascript·线性代数·算法·矩阵
AI Chen21 小时前
【矩阵分析与应用】【第1章 矩阵与线性方程组】【1.6.2.2 迹的循环置换性质】
矩阵·
大千AI助手1 天前
HOSVD(高阶奇异值分解):高维数据的“解剖术”
人工智能·线性代数·矩阵·张量·svd·hosvd·高阶奇异值分解
marsggbo1 天前
尝试从源头理解 SVD 原理和计算
线性代数·奇异值分解·svd
我想吃余1 天前
【0基础学算法】前缀和刷题日志(三):连续数组、矩阵区域和
算法·矩阵·哈希算法
贝塔实验室1 天前
LDPC 码的度分布
线性代数·算法·数学建模·fpga开发·硬件工程·信息与通信·信号处理
西***63472 天前
从信号零损耗到智能协同:高清混合矩阵全链路技术拆解,分布式可视化系统十大趋势重塑行业
分布式·线性代数·矩阵
charlie1145141912 天前
2D 计算机图形学基础速建——2
笔记·学习·线性代数·教程·计算机图形学
Jay叶湘伦2 天前
非齐次方程解的结构与几何意义的探讨
线性代数
大千AI助手2 天前
Householder变换:线性代数中的镜像反射器
人工智能·线性代数·算法·决策树·机器学习·qr分解·householder算法