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。

相关推荐
BSD_HY5 小时前
智能家居中控面板的结构暗战:薄膜开关为什么还没退场
矩阵·智能家居·薄膜开关·源头工厂
茉莉玫瑰花茶11 小时前
线性代数 [ 矩阵与线性变化 ]
线性代数·math·1024程序员节
茉莉玫瑰花茶11 小时前
线性代数 [ 矩阵乘法与线性变换复合的联系 ]
python·线性代数·math
莫叫石榴姐1 天前
半导体业务数仓建模: Lot、Wafer、Die、Recipe、OEE、YMS 建模要点
数据仓库·sql·面试·职场和发展·矩阵·1024程序员节
茉莉玫瑰花茶1 天前
线性代数 [ 序言 ]
线性代数·math·1024程序员节
茉莉玫瑰花茶1 天前
线性代数 [ 线性组合·张成的空间与基 ]
线性代数·math·1024程序员节
茉莉玫瑰花茶1 天前
线性代数 [ 向量究竟是什么 ]
线性代数·math·1024程序员节
reikocao3 天前
IMU预积分误差模型推导:协方差传播、残差构建、雅可比矩阵
人工智能·线性代数·矩阵
TK泰妞3 天前
TikTok 带货素材如何批量测试?从参考视频到内容矩阵的实操方法
线性代数·矩阵·音视频
学习论之费曼学习法3 天前
无人值守AI内容矩阵实战(7):Playwright 发布器避坑——编辑器竞态、索引延迟与风控
python·线性代数·矩阵·编辑器·浏览器自动化·playwright·踩坑记录