计算2组向量之间的旋转

时间:2013-06-19 18:18:43

标签: vector matrix rotation linear-algebra jama

我有2组带有N个条目的3D矢量。我正在尝试计算旋转矩阵,该矩阵最好将第一组与第二组对齐。

我相信我可以使用Java库JAMA来实现奇异值分解或EigenValue分解。

1)SVD或EVD是否使用正确的算法?

2)JAMA中的SVD / EVD需要矩阵。如何根据我的两组向量填充矩阵?

1 个答案:

答案 0 :(得分:0)

这是我相信你所描述的2-D版本(将其翻译成 3-D应该是直截了当的,除了m矩阵将是3x3并且具有 shftx/y/z条目)。

点(x,y)到点(u, v)可以写成:

u    m11 m12    x      shftx
  =          *      +   
v    m21 m22    y      shfty

You can rewrite this as:

x y 0 0 1 0     m11      u
             *       =  
0 0 x y 0 1     m12      v

                m21

                m22

                shftx

                shfty

这样做的原因是你在左边做了一个矩阵(用 x / y / 0/1值)与数据中的点数最多相同 组。如果你调用这个矩阵X,并在右边的U上调用列向量,那么 问题变为找到方程X * m = U的最小二乘解m。 你可以通过(新QRDecomposition(X)).solve(U)来解决这个问题。我应该说 至少有一个版本的QRDecomposition,代码中有一个错误 假设解决方案矩阵的维度错误,但我修复了它 在solve()方法中改变一行。