我正在编写一个代码,我的世界里充满了各种各样的障碍(长方形)。我的机器人是一个圆圈,在世界任何地方随机发起。我假设它的头部有一个范围传感器,并希望得到最近的障碍物/边界墙之间的距离,这是在它的直线视线中。
我使用0到360度之间的随机方向来定向机器人并使用方向的sin和cos来使机器人以相同的方向移动。但是,如何沿着这个方向获得任何障碍物或边界墙之间的距离?它应该能够告诉我它在视觉中遇到的第一个物体的距离,该距离是从0到360的角度。
请提供一些逻辑如何解决这个问题?
由于
答案 0 :(得分:1)
假设您知道角度,机器人的位置以及所有障碍物的位置,您可以使用以下功能:
答案 1 :(得分:0)
这是我认为你能做到的。 在真正的游戏开发中,他们使用了大量的优化技巧,通常会给出近似的更好的表现。 另外请注意,那里有很多用于游戏开发的库,可能会让你得到你想要的很多简化。
但无论如何,这就是我要做的事情。
1:
A)
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个角度上工作。
在这种情况下,只要查看两个分段的两个点是否位于机器人的两侧,并且交叉点是否在正确的方向上,就意味着您将通过它。
同样,还有很多优化的地方。