使用2D三边测量查找对象的位置

时间:2013-05-27 16:08:27

标签: java algorithm geometry triangulation trilateration

我试图在程序中使用trilateration来模拟它在现实生活中的表现。 我有3个发射器发出一个信号在信号移动的每个方格后变弱的信号。我正在使用2D数组和代码,生成一个粗略的数字循环。 这显示了一个发射器

00000000000000000000
00000000000000000000
00000000000000000000
00000000001000000000
00000000112110000000
00000001223221000000
00000001234321000000
00000012344432100000
00000001234321000000
00000001223221000000
00000000112110000000
00000000001000000000
00000000000000000000
00000000000000000000
00000000000000000000
00000000000000000000
00000000000000000000
00000000000000000000
00000000000000000000
00000000000000000000

我的问题是,如何在网格中找到接收器的位置? 如何找到所有三个圆相交的位置? 我尝试将圆的方程设置为彼此相等并求解,但这并没有给我任何东西,它给了我想象的数字。

如果有帮助的话,我也可以编辑代码以使圆圈不填充。 可以更改每个圆的半径

每个发射器的信号强度由接收器预先知道,强度也可以改变(在100,200或300范围或任何其他范围内)

1 个答案:

答案 0 :(得分:0)

你基本上有2个问题

  1. 查找发射器的位置
  2. 计算交点
  3. 第1点:

    可以通过以强力方式检查网格中的特定点来解决点1。然而,在尝试找到第一个时,可能会有一些最优化。一找到,就可以根据刚刚找到的变送器的半径和需要找到的变送器,对其他人的位置做出有根据的猜测。

    我建议以接近最大已知半径的间隔探测网格。假设所有发射器完全位于网格内,您可以像下图中那样进行探测(假设您拥有的最大半径为5) - A标记探测点:

    00000000000000000000
    00000000000000000000
    00000000000000000000
    00000000001000000000
    0000A00011211A000000
    00000001223221000000
    00000001234321000000
    00000012344432100000
    00000001234321000000
    00000001A23221000A00
    00000000112110000000
    00000000001000000000
    00000000000000000000
    00000000000000000000
    0000A00000000A000000
    00000000000000000000
    00000000000000000000
    00000000000000000000
    00000000000000000000
    00000000A00000000A00
    

    使用此功能,您可以使用8个探头顶部探测当前网格。当涉及到网格边缘的距离时,可以通过一些额外的检查进一步减少这一点。但在你的情况下,你会注意到你的第三个探测点落在半径范围内。从那里你可以中断探测并找到找到的发射器的中心。

    现在您已经找到了至少1个发射器的中心,您可以对其他发射器的位置进行有根据的猜测,因为您知道每个发射器的范围,并且您知道到下一个发射器的距离将是小于最大+最小范围的范围。再次,您可以在网格内以适当的间隔进行探测,以快速找到第二个发射器。再次计算第二个发射器的确切中心。

    第三个变送器易于计算。计算位于2个发现的发射器之间的线中心的点(在坐标系或网格中很容易)。丢失的点应位于假想线的两侧,您在2个发现的发射器之间绘制,距离发射器范围的最大距离尚未从该线的中心点找到。

    第2点:

    答案可以在post

    中找到

    替代方案可以是TULIP Algorithm