如何从可以平移或旋转的四个点找到一个点的坐标?所有这些点形成一个僵硬的身体

时间:2012-02-24 05:29:13

标签: algorithm math geometry linear-algebra

我有一个刚体,可以绕垂直于屏幕的轴进行平移和/或旋转。我在刚体上有四个点的坐标。如何才能获得刚体上未知点的坐标?

enter image description here

我可以用四个已知点形成一个线性方程来得到第五个未知点吗?如何在等式中适应平移和旋转?

3 个答案:

答案 0 :(得分:2)

θ关于点 p 和平移 t'的任何旋转组合都可以表示为旋转θ< / em>关于原点,然后是合适的翻译 t 。因此问题变得从已知点计算出θ t 的值。然后转换可以应用于未知点。

我认为最简单的工作方式是齐次坐标。对于列向量,通过θ围绕原点的旋转由矩阵M(θ)表示:

 cos(θ)    sin(θ)    0  
-sin(θ)    cos(θ)    0  
   0         0       1

翻译 t =( tx ty ,1) T 由矩阵T表示(的):

1    0    tx
0    1    ty
0    0    1

整体转换是乘积T( t )M(θ)。这需要针对三个未知数θ tx ty 来解决。有四个已知点,有八个方程(每个点两个,对应于 x y 坐标),所以有足够的信息来解决未知数。这只是插入已知点的值的问题。

答案 1 :(得分:2)

由于您的点数多于所需的点数,因此您可以使用所有点并求解过度完整的系统以获得可能更精确的变换矩阵(如果您对变换坐标的精度不满意,这将非常有用)。

更详细地说,您可以将转换矩阵表示为

 a    b    c
-b    a    d
 0    0    1

对于某些参数a,b和c(如果你真的需要,你可以计算出来自这些a,b和c的角度和xy平移)。然后我们从四个点(x_i,y_i)和结果(x_i',y_i')中的每一个得到这两个方程:

 a x_i  +  b y_i  +  c  =  x_i'
 a y_i  + -b x_i  +  d  =  y_i'

然后你可以将8个方程重写为具有变量(a,b,c,d)的线性方程组,如下所示(矩阵形式):

 x_1    y_1   1   0                   x_1'
 y_1   -x_1   0   1         a         y_1'
 x_2    y_2   1   0         b         x_2'
 y_2   -x_2   0   1    *    c    =    y_2'
 x_3    y_3   1   0         d         x_3'
 y_3   -x_3   0   1                   y_3'
 x_4    y_4   1   0                   x_4'
 y_4   -x_4   0   1                   y_4'

或Ax = B,其中A是左边的矩阵,x = [a b c d]',B =右边的矢量。

现在,使用SVD分解A以获得UDV'。那么x可以被发现为VD -1 U'B,其中D -1 是对角矩阵D的倒数。有关SVD的更多信息,请查看{{ 3}}

答案 2 :(得分:0)

取两个旧点A,B(线)而不失一般性假设A是原点。看看A'和B'。将A'翻译成A并将相应的翻译翻译成B'=&gt; B ''。找到角度,你就有了有效的平移和旋转。