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

时间:2014-09-08 17:05:32

标签: java collision-detection collision

我正在编写一个代码,我的世界里充满了各种各样的障碍(长方形)。我的机器人是一个圆圈,在世界任何地方随机发起。我假设它的头部有一个范围传感器,并希望得到最近的障碍物/边界墙之间的距离,这是在它的直线视线中。

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

请提供一些逻辑如何解决这个问题?

由于

2 个答案:

答案 0 :(得分:1)

假设您知道角度,机器人的位置以及所有障碍物的位置,您可以使用以下功能:

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

答案 1 :(得分:0)

这是我认为你能做到的。 在真正的游戏开发中,他们使用了大量的优化技巧,通常会给出近似的更好的表现。 另外请注意,那里有很多用于游戏开发的库,可能会让你得到你想要的很多简化。

但无论如何,这就是我要做的事情。

  1. 识别您直接前往的对象。
  2. 在您刚刚制作的对象列表中标识最近的一个。
  3. 1:

    A)

    • 以y = mx + b
    • 的形式为您的位置/角度制作公式
    • [y = tan(angle)x +(positionY - (tan(angle)* x))]

    B)

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

    • 检查该段是否与A点中的公式所做的行相交       (如果一个点较小而另一个大于公式中相同的X值,则它会越过)

    • 为你的世界边界做同样的事情

    2:This part is more tricky (to do in programmation).

    接下来,您必须找到机器人方向公式相交的位置 以及之前确定的所有行。

    对于每一行,您必须再次将该行转换为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)

    上相交

    接下来,您必须查看该点是否在您的domain机器人路径公式中。

    由于您的机器人正在查看单个方向,并且我们在点1.A中制定的公式在两个方向上都是无限的,您必须确保您找到的线路交叉点不在机器人的后方(除非他向后移动) ...)

    我猜你可以简单一点,看看cos(角度)标志,然后看看交叉点的位置,如果它在机器人的左边,而cos(角度)是负的那么& #39;很好。

    最后,

    一旦找到所有交叉点,你可以使用毕达哥拉斯定理找出最近的一个 sqrt((x1-x2)^ 2 +(y1-y2)^ 2)

    另外,请注意,由于tan(90)不存在,它不会在90和270个角度上工作。

    在这种情况下,只要查看两个分段的两个点是否位于机器人的两侧,并且交叉点是否在正确的方向上,就意味着您将通过它。

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

相关问题