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。

相关推荐
矢志航天的阿洪3 小时前
IGRF-13 数学细节与公式说明
线性代数·机器学习·矩阵
人机与认知实验室5 小时前
人机环境系统矩阵的“秩”
线性代数·矩阵
闪电麦坤955 小时前
Leecode热题100:矩阵置零(矩阵)
线性代数·算法·矩阵
人机与认知实验室5 小时前
人机环境系统矩阵典型案例分析
线性代数·矩阵
山楂树の5 小时前
计算机图形学 模型矩阵的逆矩阵:如何从“世界”回归“局部”?
线性代数·矩阵·回归
量子炒饭大师8 小时前
【C++入门】数字算子重构的共鸣矩阵 ——【运算符重载】怎样让两个自定义对象直接相加、比较或输出? 运算符重载的完整实现指南助你破局!
c++·矩阵·重构·运算符重载
闪电麦坤958 小时前
Leecode热题100:螺旋矩阵(矩阵)
线性代数·矩阵
AI科技星10 小时前
匀速圆周运动正电荷相关场方程的求导证明与验证
人工智能·线性代数·算法·矩阵·数据挖掘
Blossom.11810 小时前
从数字大脑到物理实体:具身智能时代的大模型微调与部署实战
人工智能·python·深度学习·fpga开发·自然语言处理·矩阵·django
victory04311 天前
交叉熵处softmax有计算被浪费,因为我们只需要target位置的softmax而不是整个矩阵的softmax
线性代数·矩阵