它真的逆变换矩阵吗?
Does it really inverse a transform matrix?
void inverse44(
double *inverse,
double *matrix
)
{
double trans[3], trans_xf[3];
MTX3_t matrix3;
inverse[0] = matrix[0];
inverse[1] = matrix[4];
inverse[2] = matrix[8];
inverse[4] = matrix[1];
inverse[5] = matrix[5];
inverse[6] = matrix[9];
inverse[8] = matrix[2];
inverse[9] = matrix[6];
inverse[10] = matrix[10];
inverse[15] = 1.0;
inverse[12] = inverse[13] = inverse[14] = 0.0;
trans[0] = matrix[3];
trans[1] = matrix[7];
trans[2] = matrix[11];
MTX4_mtx3(MTX4_cast_pc(matrix),&matrix3);
MTX3_vec_multiply_t(VEC3_cast_pc(trans),&matrix3,VEC3_cast(trans_xf));
inverse[3] = -trans_xf[0];
inverse[7] = -trans_xf[1];
inverse[11] = -trans_xf[2];
}
这个函数有什么作用?
MTX3_t是3*3矩阵的定义。MTX4_mtx3得到一个子矩阵。MTX3_vec_multiply_t向量和矩阵相乘。
是的。请参阅此链接以计算转换矩阵的逆矩阵。基本思想是变换矩阵(第一个 3x3 子矩阵)的缩放/旋转组合是正交矩阵,正交矩阵的逆矩阵等于转置。因此,第一部分是转置计算。第二部分(从行 trans[0] = 矩阵 [3]开始)是翻译部分(矩阵的最后一列)的逆运算计算。
仅当转换矩阵是旋转和平移的组合时,才会反转转换矩阵。 如果变换矩阵还包括缩放或透视投影,则它将无法正常工作。
相关文章:
- 在决定是通过参考还是通过价值时,尺寸真的是一个问题吗
- 字节真的是最小可寻址单元吗
- 如果我真的真的想从 STL 容器继承,并且我继承构造函数并删除新运算符,会发生什么?
- 如何在 std::vector 中找到<bool>哪些索引是真的?
- std::string 的对象真的可以移动吗?
- 基于范围的变换以实现正常循环
- 在这种情况下,我真的复制了字节还是复制了字符?
- OpenCV 傅里叶变换复杂输出问题
- int8_t和uint8_t真的是整数吗?它们有什么用?
- 真的没有来自 std::string_view 的 std::string 的显式构造函数吗?
- 查找不等式为真的次数时出现问题
- SFML 纹理变换(放大)
- 考虑到其他好处,关键字'auto'真的有助于简化调试C++吗?
- 有没有更好的方法来处理异常? try-catch块真的很丑
- 在为嵌套类定义行外友元时,我真的必须打破封装吗?
- 你如何理解"std: :forward is just syntactic sugar"?这是真的吗?
- "std::forward"和"std::move"真的不生成代码吗?
- VS 2017 和 2019 运行 c++ 真的很慢
- 结构和类在C++中真的等价吗?
- 它真的逆变换矩阵吗?