如何分解仿射矩阵?

How to decompose affine matrix?

我在两个 3D 系统中有一系列的点。有了它们,我使用 np.linalg.lstsq 来计算两者之间的仿射变换矩阵 (4x4)。但是,由于我的项目,我必须 "disable" 变换中的剪切。有没有办法将矩阵分解为基本变换?我已经找到了如何对平移和缩放执行此操作,但我不知道如何分离旋转和剪切。 如果没有,有没有办法从不包括剪切的点计算变换矩阵? 我只能用numpy或tensorflow来解决这个问题btw.

我不确定我是否理解你的问题。

无论如何如果你有两组3D点P和Q,你可以使用Kabsch算法找出旋转矩阵R和平移向量T使得(RP + T)和Q之间的平方距离之和被最小化。 您当然可以将 R 和 T 组合成一个 4x4 矩阵(仅旋转和平移。没有剪切或缩放)。