Java 如何在不知道障碍物位置的情况下确定与障碍物的距离
我正在编写一个代码,在这个代码中,我的世界充满了各种障碍(矩形)。我的机器人是一个圆形的,随机产生于世界上的任何地方。我假设它的头上有一个距离传感器,希望得到最近的障碍物/边界墙之间的距离,该障碍物/边界墙位于它的直线视图中 我正在使用0到360度之间的随机方向来确定机器人的方向,并使用方向的正弦和余弦以相同的方向移动机器人。但是我怎么才能得到任何障碍物或边界墙之间沿这个方向的距离呢?它应该能够告诉我它在视觉中遇到的第一个物体的距离,这是一个0到360度的角度 请给我一个逻辑提示如何遇到这个问题Java 如何在不知道障碍物位置的情况下确定与障碍物的距离,java,collision-detection,collision,Java,Collision Detection,Collision,我正在编写一个代码,在这个代码中,我的世界充满了各种障碍(矩形)。我的机器人是一个圆形的,随机产生于世界上的任何地方。我假设它的头上有一个距离传感器,希望得到最近的障碍物/边界墙之间的距离,该障碍物/边界墙位于它的直线视图中 我正在使用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))]
- 对于每个对象,将对象分割为多个线段(2个点)
- 检查线段是否与点A中公式的直线相交 (如果一个点较小,而另一个点大于公式中的相同X值,则该点相交)
- 对你的世界边界做同样的事情
- 以下是我认为你可以做的。
在真实的游戏开发中,他们使用了很多优化技巧,通常给出近似值以获得更好的性能。
还要注意的是,有很多用于游戏开发的库,这可能会使你想要的东西简化很多
但无论如何,我要做的是
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我只想知道与第一个障碍物的距离,或者如果视线中没有障碍物,那么就是边界墙