三维刚体平移和旋转的python实现
我一直在研究如何使用python解决以下问题:三维刚体平移和旋转的python实现,python,computational-geometry,rotational-matrices,Python,Computational Geometry,Rotational Matrices,我一直在研究如何使用python解决以下问题: 我们有点a,b,c,d,它们构成了一个刚体 某些未知的3D平移和旋转应用于刚体 现在我们知道了a,b,c的坐标 我们要计算d的坐标 到目前为止我所知道的: 由于万向节锁等原因,试图通过“直接”的欧拉角计算来实现这一点似乎是个坏主意 因此,第4步将涉及一个变换矩阵,一旦知道旋转和平移矩阵,使用以下其中一个步骤看起来很容易: 我不能解决的是,在给定a,b,c的“新”坐标的情况下,如何计算旋转和平移矩阵 我可以看到,在一般情况下(非刚体),这
- 由于万向节锁等原因,试图通过“直接”的欧拉角计算来实现这一点似乎是个坏主意
- 因此,第4步将涉及一个变换矩阵,一旦知道旋转和平移矩阵,使用以下其中一个步骤看起来很容易:
我可以看到,在一般情况下(非刚体),这是旋转部分,但我认为对于刚体,应该有一些更快的方法,通过使用点计算出一组正交单位向量来直接计算它。对于您试图匹配的一组对应点(可能存在扰动)我使用了SVD(奇异值分解),它似乎存在于numpy中 这种技术的一个例子(甚至在Python中)可以是,但我还没有评估它的正确性 你要做的是一个“基础变换”或“基础变化”,它将被表示为一个变换矩阵。假设3个已知点不共线,可以通过以下方式创建初始基础:
| x1 y1 z1 |
| x2 y2 z2 |
| x3 y3 z3 |
你可以使用仿射矩阵计算“未知3D平移和旋转”矩阵(abc,abc,new,shear=False,scale=False)从中计算,并将其应用于
d
谢谢-实际上它看起来像是叠加矩阵
,在同样的情况下,我想它实际上会对我的情况起作用吗?如果你在回答上面发表评论,我会接受的!接受这一点是因为它提供了一个一般的、高质量的答案,尽管对我问题的评论实际上更直接地解决了我的问题。“假设你的三个已知点不是共面的”,而是共线的,对吗?正确,固定的。我想4点,非共面的,但只有3点是必要的,正如你所纠正的。