Java 如何在不知道障碍物位置的情况下确定与障碍物的距离

Java 如何在不知道障碍物位置的情况下确定与障碍物的距离,java,collision-detection,collision,Java,Collision Detection,Collision,我正在编写一个代码,在这个代码中,我的世界充满了各种障碍(矩形)。我的机器人是一个圆形的,随机产生于世界上的任何地方。我假设它的头上有一个距离传感器,希望得到最近的障碍物/边界墙之间的距离,该障碍物/边界墙位于它的直线视图中 我正在使用0到360度之间的随机方向来确定机器人的方向,并使用方向的正弦和余弦以相同的方向移动机器人。但是我怎么才能得到任何障碍物或边界墙之间沿这个方向的距离呢?它应该能够告诉我它在视觉中遇到的第一个物体的距离,这是一个0到360度的角度 请给我一个逻辑提示如何遇到这个问题

我正在编写一个代码,在这个代码中,我的世界充满了各种障碍(矩形)。我的机器人是一个圆形的,随机产生于世界上的任何地方。我假设它的头上有一个距离传感器,希望得到最近的障碍物/边界墙之间的距离,该障碍物/边界墙位于它的直线视图中

我正在使用0到360度之间的随机方向来确定机器人的方向,并使用方向的正弦和余弦以相同的方向移动机器人。但是我怎么才能得到任何障碍物或边界墙之间沿这个方向的距离呢?它应该能够告诉我它在视觉中遇到的第一个物体的距离,这是一个0到360度的角度

请给我一个逻辑提示如何遇到这个问题


谢谢

假设您知道角度、机器人的位置和所有障碍物的位置,您可以实现如下功能:

  • 如果角度小于90或大于270,则将x坐标增加1,否则将减少1
  • 从当前x坐标到世界边缘(我不知道如何实现世界)进行for循环,扫描位置(x,x*tan(角度))处的任何障碍物,按照上述步骤递增或递减
  • 你遇到的第一个障碍,返回sqrt(x^2+(x*tan(角度))^2-这就是毕达哥拉斯定理

    • 以下是我认为你可以做的。 在真实的游戏开发中,他们使用了很多优化技巧,通常给出近似值以获得更好的性能。 还要注意的是,有很多用于游戏开发的库,这可能会使你想要的东西简化很多

      但无论如何,我要做的是

    • 识别你们直走时要经过的物体
    • 在刚创建的对象列表中,确定最近的一个
    • 1:

      (A)

      • 用y=mx+b的形式为你的位置/角度建立一个公式
      • [y=tan(角度)x+(位置y-(tan(角度)*x))]
      (B)

      • 对于每个对象,将对象分割为多个线段(2个点)

      • 检查线段是否与点A中公式的直线相交 (如果一个点较小,而另一个点大于公式中的相同X值,则该点相交)

      • 对你的世界边界做同样的事情
      2:

      接下来,您必须找到机器人方向公式相交的位置 使用您以前识别的所有行

      对于每一行,必须再次将该行转换为y=mx+b 假设我们有:

      y=3x+5 and 
      y=5x+1
      
      3x+5  = 5x+1
      3x-5x = 1-5
      -2x   = -4
      x     = 2
      
      然后在任一公式中将x替换为2,将得到交点:

      y = 3(2)+5 = 11
      y = 5(2)+1 = 11
      
      所以这两条线相交于点(2,11)

      接下来,你要看看这个点是否在你的机器人路径公式中

      由于您的机器人正看着一个方向,并且我们在点1.a中得出的公式在两个方向上都是无限的,因此您必须确保找到的线交点不在机器人的后面(除非他向后移动…)

      我想你可以简单一点,看看cos(角度)符号,然后看看交点的位置,如果它在你的机器人的左边,cos(角度)是负数就可以了

      最后,

      找到所有相交点后,可以使用毕达哥拉斯定理sqrt((x1-x2)^2+(y1-y2)^2)

      另外,请注意,它将不适用于90和270个角度,因为tan(90)不存在

      在这种情况下,只要看看线段的两个点是否都在机器人的两侧,并且交点的方向正确,就意味着你通过了它


      同样,还有很多地方需要优化。

      您是否询问如何在方向/视角内识别对象?或者你想知道如何计算两点之间的距离?@JSlain我只想知道与第一个障碍物的距离,或者如果视线中没有障碍物,那么就是边界墙