定位设备(相交圆)

时间:2014-01-02 08:38:46

标签: java javascript c algorithm math

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

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

底部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)周围绘制一系列圆圈,看起来像这样:

enter image description here

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

1 个答案:

答案 0 :(得分:7)

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

其中圈(P,q)指定P和半径q的中心。

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

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

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

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

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

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