首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计算两组矢量之间的旋转

计算两组矢量之间的旋转
EN

Stack Overflow用户
提问于 2013-06-20 02:18:43
回答 1查看 512关注 0票数 0

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

我相信我可以使用java库JAMA通过奇异值分解或EigenValue分解来实现这一点。

1) SVD或EVD是正确的算法吗?

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

EN

回答 1

Stack Overflow用户

发布于 2013-12-02 02:36:43

这是我相信你正在描述的2-D版本(将它转换成3-D应该很简单,除了m矩阵将是3x3并且有shftx/y/z条目)。

点(x,y)到点(u,v)的仿射变换可以写为:

代码语言:javascript
运行
复制
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。你可以通过(new QRDecomposition(X)).solve(U).我应该说,在QRDecomposition的至少一个版本中,代码中存在一个错误,该错误假定解决方案矩阵的维度错误,但我通过更改solve()方法中的一行来修复它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17198470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档