问题 寻找一组点的旋转中心[关闭]


如果我有一组任意点,然后同一组点旋转一定程度,有没有人知道任何算法来计算/估计旋转中心的位置?还是需要这些算法的研究领域? 我无法找到任何相关信息。

谢谢


11636
2017-11-04 19:13


起源

地球 旋转 在它的轴上。它 围绕 在太阳周围。你指的是哪一个? - San Jacinto
点之间的对应关系是否已知? - nav
这个问题似乎是偏离主题的,因为它是关于数学,而不是编程。 - bmargulies


答案:


假设你有一个点(x,y),它移动到(x',y')。

然后旋转中心必须位于垂直于(x,y) - (x',y')的直线上,并且与中心(x,y) - (x',y')相交。

现在采取另一个点,(x2,y2),移动到(x'2,y'2)。这也产生了旋转中心必须位于其上的线。

现在取这两行并计算交点。那里有旋转中心。


更新:如果你没有找到哪一点的对应关系,那就不难理解了。这是我头脑中的一个建议:找到“之前”点的质量中心。根据距离此点的距离对点进行排序。现在对“后”点进行相同的操作。现在两组的顺序应该匹配。 (最接近质心的点 之前 旋转,应该是最接近质心的点  回转。)


9
2017-11-04 19:19



当他知道点之间的关系时,这个算法很好。在两个不同的项目中。 - Saeed Amiri
如果您了解点之间的相关性,即如果它们被标记,但如果它们之前和之后是任意的,则问题变得更加困难(由于身份问题;如何识别这一点),这是一个很好的过程轮换之前和之后是一样的吗?)。 - Paul Sonier
没有人说他没有;对于给定的问题子集,您已经很好地回答了问题。 OP尚未准确指出那是否是子集 - Paul Sonier
很抱歉没有指定完整的问题,这是一个很棒的起点,谢谢(Y) - philbert
@ belisarius,另一方面,有许多退化的情况,无法弄清楚旋转。例如,正方形中的四个点,之前和之后或所有相等距离的点位于圆上... - aioobe


对于这种类型的问题,这将是疯狂的矫枉过正,但我​​认为的功能 广义Hough变换 对象检测至少包含你想要的东西,即使它并不是为了这个目的。

给定从一组点和另一组任意点创建的任意形状,它会尝试在点集中找到形状,即使它已被旋转,缩放和平移。您可以取出缩放和翻译并获得所需内容。

基本上它将归结为粗暴强迫可能的旋转点,以查看哪一个最适合第二组点。


3
2017-11-04 19:41





非常有趣的问题。我对此的了解有点过时,但我记得,有一些关于使用子图分析的研究;也就是说,通过点之间的距离和其中的方差来表征点集的子部分,然后在旋转之前和之后关联那些子图分析。

当然,这是假设具有不均匀分布的非常复杂的点集。


1
2017-11-04 19:22





您需要在数据集上找到一些签名,以便识别第一组(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中所有元素的旋转。


0
2017-07-02 12:32