【问题标题】:Positioning Devices (Intersecting Circles)定位装置(相交圆)
【发布时间】:2014-01-02 08:38:46
【问题描述】:

我有一系列点,它们代表房间内的移动设备。以前我系统地从每个发出 ping 并记录它到达其他的时间以计算距离。

这是一个示例网络的简单图表。

底部的 A 节点应该是 D

记录距离后,我得到了散列中的距离信息。

A = {B: 2, C: 1, D: 3}
B = {A: 2, C: 2, D: 2}
C = {A: 1, B: 2, D: 2}
D = {A: 3, B: 2, C: 2}

我的数学很生疏,但我觉得我应该能够使用这些值分别绘制圆,然后与圆相交以计算节点的相对图。

每次我尝试这样做时,我都会从围绕根节点(在本例中为 A)周围绘制的一系列圆圈开始,看起来像这样:

我知道其他节点必须位于我围绕 A 绘制的线上,但无法定位它们,如何绘制它们的距离以便与圆相交并创建图形?

【问题讨论】:

  • 在第一张图片底部的A节点,实际上是D?
  • 为什么有 3 个独立的语言标签? :)
  • 问题不是你的数学生锈了;问题是,您正在尝试解决一个难题。它当然不能直接使用封闭式方程求解。
  • @GregKopff 为了让那些按他们的语言过滤问题流的人可以看到问题。
  • 您可以将下一个节点放在其圆的任何位置。然后,您开始使用来自两者的信息来定位其他节点。没有唯一的解决方案,因为您可以围绕任何节点旋转 360 度,距离仍然相同。

标签: java javascript c algorithm math


【解决方案1】:

从任意一点开始,例如 A。现在取第二个点 B,然后将其绘制在圆心的某处,以 A 为中心,半径为 A 和 B 之间的距离。现在取另一个点 C。 让距离(A,C)=x(B,C)=y。找到圆 (A,x)(B,y) 的交点。标记为C

其中圆 (P,q) 指定中心在 P 和半径 q

如果不存在这样的点,那么给定的数据是不正确的。

现在取第 4th 点,同样找到以前三个点为中心的圆的交点,半径分别为第 4 个和其他三个点之间的距离。应用此方法,直到绘制所有点。

请注意,正如 RobH 所指出的那样,可以有无限多的解决方案。由于您只需要一个虚拟表示,我想任何有效的解决方案都足够了。

上述算法的顺序为O(N^2)。如果点数大于 10000,可能效率低。

还要注意,要找到k 圆的交点,首先需要找到任意两个圆的交点,并在剩余的圆上验证这些点。这是因为k 圆最多可以在两点相交,假设所有圆都有不同的中心。

编辑:在任何阶段,如果一个点有两个有效的图,我们可以选择其中任何一个,但我们会得出一个有效的解决方案。

【讨论】:

  • 请记住,在任何时候,您尝试绘制的点可能有 2 个解决方案 - 您需要至少 3 个相交的圆来唯一地计算位置。最好先计算距离A最大的点。
  • 实际考虑使这个问题比这里描述的要困难得多:所有测量都必须作为有效距离的间隔(精度的有限限制)。使用您的迭代方法,这会导致错误的累积,很容易导致无法放置下一个点。您应该跟踪可用位置的区域。每个新点使该区域变得更加复杂。
  • @MarkoTopolnik 同意你的看法。我认为在实际实现上述算法时做出这样的假设(关于精度)是很直观的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-13
  • 2016-05-11
  • 1970-01-01
相关资源
最近更新 更多