我有2组N个元素的3D向量。我正试图计算旋转矩阵,它最好地将第一组与第二组对齐。
我相信我可以使用java库JAMA来完成奇异值分解或特征值分解。
1) SVD或EVD是正确的算法吗?
2) JAMA的SVD/EVD需要矩阵。如何用这两组向量来填充矩阵?
这是我相信你所描述的二维版本3-D应该很简单,除了m矩阵是3x3shftx/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的最小二乘解。你可以通过(新QRDecomposition(X)).solve(U)
)来解它。我应该用至少有一个版本的QRDecomposition在代码中有一个bug假设解矩阵的维数是错误的,但是我通过修改solve()方法中的一行