我一直在尝试使用python解决以下问题:
到目前为止我所知道的:
因此,步骤4将涉及变换矩阵,一旦您知道旋转和平移矩阵,看起来这个步骤很容易使用其中一个:
我无法解决的是如何在给定a,b,c的“新”坐标的情况下计算旋转和平移矩阵。
我可以看到,在一般情况下(非刚体),旋转部分是Wahba's problem,但我认为对于刚体,应该有一些更快的方法来直接计算它使用这些点的正交单位向量集。
答案 0 :(得分:2)
对于你想要匹配的一组对应点(可能存在扰动),我使用了SVD(奇异值分解),它似乎存在于numpy中。
这种技术的一个例子(在Python中甚至可以)found here,但我没有评估它的正确性。
您要求的是“基础变换”或“基础变更”,它将表示为变换矩阵。假设您的3个已知点不共线,您可以通过以下方式创建初始基础:
这给你一个初始的x,y,z坐标基础A.为你的新点做同样的事情,你得到第二个基础B.现在你想要找到转换T,它将在A中取一个点并转换它到B(改变基础)。那部分很容易。您可以反转A将点转换回Normal,然后使用B转换为第二个。由于A是正交的,你只需转置A即可得到逆。所以“new d”等于d * inverse(A)* B.(虽然取决于你的表示,你可能需要使用B * inverse(A)* d。)
你需要对矩阵有一定的了解才能得到所有这些。您对向量和矩阵的表示将告知您将矩阵乘以得到T的顺序(T是反(A)* B或B *反(A))。
要从矢量x =(x1,x2,x3),y =(y1,y2,y3),z =(z1,z2,z3)计算基础矩阵,请将其填充为:
| x1 y1 z1 |
| x2 y2 z2 |
| x3 y3 z3 |