我在网格上随机放置了5个{x,y}点
每个点不知道其他点的{x,y}坐标
每个点确实知道每个其他点与{x,y}位置的距离
每个点与每个其他点交换此距离信息
所以每个点都知道每个点的每个距离
使用此距离信息,每个点可以使用自身作为参考点计算(通过查找角度)每个其他点的三角形
示例,第1点可以计算以下三角形: 1-2-3, 1-2-4, 1-2-5, 1-3-4, 1-3-5, 1-4-5, 并且使用从其他点收到的距离数据,它也可以计算 2-3-4, 2-3-5, 2-4-5, 3-4-5
我想构建一个相对于单个点的每个其他点的位置的地图
我应该怎么做呢?我认为这将是某种三角测量算法,但这些主要似乎是从其他三个点计算一个点的位置,而不是基于距离信息发现其他点{x,y}坐标的其他方向
我已经尝试为每3个三角形点绘制两个可能的三角形,然后在固定的已知点上旋转它们以尝试对齐它们,但我认为这条路径最终会出现太多可能性和错误
最终,我希望每一点都以相对于自身的每个其他点的{x,y}坐标结束
答案 0 :(得分:0)
你知道从一个点到另一个点的距离dij
。因此,点2位于中心点1的圆周并且半径= d12。点3位于中心点1的圆周上,R = d13,它也位于中心点2的另一个圆周上,R = d23。
看到这张图片:
为简单起见,我在X轴上设置了第2点。
如您所见,第3点位于以P1和P2为中心的两个cicrcumferences的交点。还有第二个交叉点P3a
。让我们选择一个向上并继续的那个。
对于P4
,我们可以使用三个圆周,以P1,P2和P3为中心。我们再次得到两个解决方案
其余的点可以完成相同的过程。对于Pn
,您有n-1
个圆周。
我相信你能找到圆圈交点的数学。
必须注意一些评论:
1)如果您首先按距离P1
对点进行排序,则构造会更简单。
2)并非所有距离都能产生解决方案。例如,增加d13
P3
的两个圆周之间没有交集。或者增加d14
,现在三个圆周不会在两个预期点4
和4a
中相交。
3)通过考虑交叉口的平均值和每个解决方案与该平均值的距离,可以使这一事实过度工作。您可以在这些距离中设置容差,并判断平均值是否为解决方案,或者某些dij
是否错误。由于可能有两种解决方案,因此必须考虑两种平均值。
4)在我绘制的情况下,两个可能的三角剖分是对称的,在X轴上。
通过绕P1
旋转获得真正的解决方案。要计算旋转角度,您需要另一个点的{x,y}
坐标。