查找一组点的旋转中心

11
如果我有一组任意的点,然后将相同的点集旋转一定角度,是否有人知道任何算法来计算/估算旋转中心?或者有哪些领域需要这类算法?我在寻找相关信息时遇到了困难。谢谢。

地球在它的轴上“旋转”。它围绕太阳“公转”。你指的是哪一个? - San Jacinto
点之间的对应关系已知吗? - navneeth
这个问题似乎不适合讨论,因为它涉及数学而非编程。 - bmargulies
4个回答

9
假设您有一个点(x,y),它移动到了(x',y')。
那么旋转中心必须位于垂直于(x,y)-(x',y')的线上,并且与中心(x,y)-(x',y')相交。
现在取另一个点(x2,y2),它移动到(x'2,y'2)。这也产生了一个旋转中心必须位于其上的线。
现在将这两条线相交。您就得到了旋转中心。
更新:如果您没有哪个点去了哪里的对应关系,那么应该不难弄清楚。这是我头脑中的建议:找到“之前”点的重心。根据它们与此点的距离对点进行排序。现在用“之后”的点做同样的事情。这两组的顺序现在应该匹配。(旋转之前最靠近重心的点应该是旋转之后最靠近重心的点。)

4
没人说他没有;你已经很好地回答了一个问题子集的问题。但是,OP还没有明确指定那个子集是什么。 - Paul Sonier
1
抱歉没有说明完整的问题,这是一个很好的起点,谢谢(Y) - philbert
1
另一方面,有许多退化情况是无法确定旋转的。例如,在正方形中的四个点,在旋转前后或在圆上等距离分布的所有点... @belisarius - aioobe
@SaeedAlg,如果你认为我从你的回答中得到了更新,那么你错了。我只是建议使用质心来确定前后点之间的关系。据我所知,你的答案完全不同。 - aioobe
只是一个想法,如果您不知道点之间的对应关系,可能可以在旋转前后对点进行线性回归。 - Christian Ammer
显示剩余12条评论

3
这种问题不太需要如此复杂的解决方法,但我认为广义霍夫变换的功能至少包含了你想要的,尽管它并不完全是为此目的而设计的。给定由一组点创建的任意形状和另一组任意点,它尝试在点集中找到该形状,即使它已经旋转、缩放和平移。您可以去掉缩放和平移,并获得所需的结果。基本上,它将归结为强制执行可能的旋转点,以查看哪一个最适合第二组点。

1
非常有趣的问题。我的知识有点过时,但我记得在这方面有一些子图分析的研究;也就是通过点之间的距离和方差来表征点集的子部分,然后将这些子图分析与旋转前后进行相关性分析。
当然,这是基于一个非常复杂的、非均匀分布的点集的假设。

0

您需要在数据集中找到一些签名,以便识别第一组(A)中的点与第二组(B)中的点。

一种简单的方法如下:

  • 对于A中的每个元素E,找到两个最近的点(N1,N2),并计算N1、E、N2之间的角度,得出三个值:角度和E到N1和N2的距离(ang,d1,d2)。

  • 在A中找到3个具有唯一元组(ang,d1,d2)的点。

  • 对于B中的每个元素,也计算其到其两个最近邻居的距离和角度。找到与从A中选择的那些匹配的3个点。

  • 计算旋转只是几何分析的问题。

更新:您需要3个点来确定3D空间中的旋转。在2D中,只需要两个点。

更新2:正如其他帖子上的评论所指出的那样,A中可能存在对称性,这将阻止您找到( ang,d1,d2)的3个唯一三元组。在这种情况下,对于A中选择的三个点中的每一个,您都必须在B中的所有元素中执行搜索,匹配它们的三元组,直到某个组合产生适用于A中所有元素的旋转。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接