Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用二维三边测量查找对象的位置_Java_Algorithm_Geometry_Triangulation_Trilateration - Fatal编程技术网

Java 使用二维三边测量查找对象的位置

Java 使用二维三边测量查找对象的位置,java,algorithm,geometry,triangulation,trilateration,Java,Algorithm,Geometry,Triangulation,Trilateration,我试图在一个程序中使用三边测量来模拟现实生活中的情况。 我有3个发射器,它们发出的信号在信号移动的每一个方块后都会变弱。我使用一个2D数组和代码生成一个粗略的数字圈。 这显示了其中一个发射器 00000000000000000000 00000000000000000000 00000000000000000000 00000000001000000000 00000000112110000000 00000001223221000000 00000001234321000000 0000001

我试图在一个程序中使用三边测量来模拟现实生活中的情况。 我有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点:

    点1可以通过以蛮力方式检查网格中的特定点来解决。然而,在试图找到第一种方法时,有两种可能的优化方法。一旦你找到了一个,你就可以根据你刚刚找到的发射器和你需要找到的发射器的半径,对其他发射器的位置进行有根据的猜测

    我建议在接近已知最大半径的间隔上探测网格。假设所有变送器完全在网格内,您可以按照下图所示进行探测(假设最大半径为5)-A标记探测点:

    00000000000000000000
    00000000000000000000
    00000000000000000000
    00000000001000000000
    0000A00011211A000000
    00000001223221000000
    00000001234321000000
    00000012344432100000
    00000001234321000000
    00000001A23221000A00
    00000000112110000000
    00000000001000000000
    00000000000000000000
    00000000000000000000
    0000A00000000A000000
    00000000000000000000
    00000000000000000000
    00000000000000000000
    00000000000000000000
    00000000A00000000A00
    
    有了这个,你可以用8个探针探测你当前的网格。当涉及到到网格边缘的距离时,可以通过一些额外的检查进一步减少该距离。但是在你的例子中,你会注意到你的第三个探测点落在一个半径之内。从那里开始,你可以中断探测,寻找找到的发射器的中心

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

    第三个发射机易于计算。计算位于两个找到的发射器之间的直线中心的点(在坐标系或网格中很容易做到)。缺失点应位于您在两个找到的发射器之间绘制的假想线的任一侧,距离该线的中心点的最大距离为您尚未找到的发射器范围

    第2点:

    答案就在这里


    另一种选择是

    我还有一些其他问题。是否存在变送器的最小/最大半径。每个发射机的半径相同还是不同?你可以尝试使用RANSAC:每个接收机有三个数字(信号强度)吗?给定两个信号强度,你知道两个发射机的实际距离,还是只知道它们之间的距离比?@3xil3它们可以是你想要的任何东西want@jwpat7每个发射机都发出一个信号,因此接收机可以接收其中的3个。但是,考虑到信号强度,我不确定如何获得距离