3
A
回答
3
你需要使用仿射矩阵分解,有几种方法有不同的优缺点。你必须看看它。这里有一些链接,让您虽然起步:
http://callumhay.blogspot.com/2010/10/decomposing-affine-transforms.html
http://www.itk.org/pipermail/insight-users/2006-August/019025.html
这可能是根据您的转化的性质简单或更复杂的,虽然,我假设它的仿射。但如果它是线性的/僵化的,那么这更容易,如果它是一个透视变换,那么我想它会更复杂。
2
如果你肯定知道你的矩阵是旋转+平移缩放+,那么你可以只提取所需的参数:
rotation = atan2(m12, m11)
scale = sqrt(m11*m11 + m12*m12)
translation = (m31, m32)
编辑
我没注意到你有兴趣3D转换,在这种情况下,旋转部分是烦人的,但如果你只是想翻译和规模......
translation = (m41, m42, m43)
scale = sqrt(m11*m11 + m12*m12 + m13*m13)
1
的4×4齐次变换矩阵defin通过ED:
| x2 | | R11*SX R12*SY R13*SZ TX | | x1 |
| y2 | = | R21*SX R22*SY R23*SZ TY | | y1 |
| z2 | | R31*SX R32*SY R33*SZ TZ | | z1 |
| 1 | | 0 0 0 1 | | 1 |
其中(SX,SY,SZ)
是缩放因子,(TX,TY,TZ)
是翻译因子和Rij
是旋转系数。
自从您选择最后一列以来,翻译起来并不重要。为了得到缩放您使用的转型是一个旋转次对角线缩放(A=R*S
),因此
tr(A)*A = tr(R*S)*(R*S) = tr(S)*tr(R)*R*S = tr(S)*S
其中tr(A)
是转置运算符的属性。为了得到缩放因子计算
S2 = tr(A)*A
和挑的前三个角项
SX = sqrt(S2(1,1))
SY = sqrt(S2(2,2))
SZ = sqrt(S2(3,3))
然后组装新改造为平方根:
| SX 0 0 TX |
| 0 SY 0 TY |
| 0 0 SZ TZ |
| 0 0 0 1 |
相关问题
- 1. 将3X3变换矩阵变换为4X4矩阵以进行CSS变换matrix3d
- 2. Concat两个4x4矩阵一起?
- 3. 如何将3x2矩阵转换为4x4矩阵?
- 4. 如何将3x3旋转矩阵转换为4x4矩阵?
- 5. 如何将4x4矩阵转换为3x3矩阵?
- 6. 从MATLAB中的4个点计算2D齐次透视变换矩阵
- 7. 4x4矩阵分解算法
- 8. 4x4 3D矩阵操纵
- 9. 反转4x4矩阵算法
- 10. 4x4矩阵乘法为了
- 11. 如何将4x4变换矩阵传递给使用glUniformMatrix4fv的vShader?
- 12. 2个4x4矩阵之间的插值
- 13. 机器人:用于DH齐次变换矩阵参数
- 14. 实现矩阵变换与齐次坐标
- 15. 变换矩阵
- 16. 一个革命的OpenGL矩阵变换
- 17. 计算帆布context.setTransform矩阵基于4x4矩阵
- 18. 如何从平移,旋转和缩放转换中转换4x4矩阵?
- 19. 使用4x4矩阵移动边线
- 20. 16X2 LCD屏蔽与4x4矩阵键盘
- 21. 如何表示4x4矩阵旋转?
- 22. 4x4矩阵前乘VS后乘
- 23. 3D 4x4矩阵的无效旋转
- 24. 如何旋转4x4矩阵(C#/ XNA)
- 25. 如何优化4x4矩阵乘法?
- 26. 4x4的2D人物矩阵排列
- 27. 将4x4键盘矩阵与Atmega32接口
- 28. 4x4矩阵的调试语句
- 29. iOS 4使用4x4矩阵加速Cblas
- 30. OpenTK矩阵变换
那么,如果只存在翻译,缩放和旋转 - 然后可以通过提取平移和缩放组件并将它们相乘并忽略剩余的内容来移除旋转... – Dan
也是你r缩放假设在每个方向上均匀缩放?这可能不是这种情况,即图像可能会被拉长 – Dan
@Dan:“令人讨厌”我的意思是简单地用自由坐标表示旋转的“本质”,因为它在2D中完成是不可能的(参见万向节锁定问题)。关于比例缩放注意,如果允许非均匀缩放和旋转,则闭合变得更一般化,甚至远离奇异性比例= 0,什么是旋转角度的概念变得有问题。 – 6502