定位设备(相交圆)

Dan*_*nce 8 javascript c java algorithm math

我有一系列的观点,代表一个房间内的移动设备.以前我系统地从每个发出一个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}
Run Code Online (Sandbox Code Playgroud)

我的数学是生锈的,但我觉得我应该能够使用这些值作为相应的绘制圆,然后与圆相交以计算节点的相对图.

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

在此输入图像描述

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

nit*_*712 7

从任何一个点开始说A.现在取第二个点说B,并将其绘制在圆上的某个位置,中心位于A,半径位于A和B之间的距离.现在取另一个点C.让距离(A,C)=x(B,C)=y.找到圆的交叉点(A,x)(B,y).标记为C.

其中circle (P,q)指定center P和radius q.

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

现在取第4 点并类似地找到圆的交点,其中心在前三个点,半径分别为第四个点和其他三个点之间的距离.应用此方法直到绘制所有点.

请注意,RobH指出,可以有无限多的解决方案.由于您只需要虚拟表示,我猜任何有效的解决方案都足够了.

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

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

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

  • 实际考虑使这个问题比这里描述的要困难得多:所有测量必须作为有效距离的*间隔*(有限的精度限制).使用迭代方法会导致错误的累积,很容易导致无法放置下一个点.您应该跟踪可用位置的*区域*.每个新点都会使该区域变得更加复杂. (3认同)
  • @MarkoTopolnik同意你的意见.我认为在实际实现上述算法时做出这样的假设(关于精度)是直观的. (2认同)