假设我们有一个在点A的物体。它想知道是否能够移动到点B。由于速度受限,因此它只能一步一步地移动。它沿着它移动的方向投射出一条光线。光线与物体碰撞并被我们检测到。如何安全地通过我们的光线(避免碰撞)?
顺便问一下,在物体投射的情况下,是否有办法使这样的事情起作用?它是否像简单的光线投射那样快?
是否有一种方法可以找到最优路径?
顺便问一下,在物体投射的情况下,是否有办法使这样的事情起作用?它是否像简单的光线投射那样快?
是否有一种方法可以找到最优路径?
让我们从一个简单的方法开始...
如果只涉及一个对象,您可以计算障碍物所有顶点、起点和终点的凸包。然后,沿着凸包顺时针和逆时针遍历两个方向以从A到B。选择最短路径。
这会有些复杂,因为您要移动的形状不仅仅是一个点。您不能盲目地移动它的中心,否则它就会碰撞。当它经过一个顶点时,情况变得更加复杂,因为您必须让对象的一个边缘与障碍物的顶点紧贴在一起。
但希望这能给您提供一个思考的想法,这并不难理解。
从一个角度来看,这可以看作是一个阴影投射问题。将A
作为“光源”,然后决定场景中每个点是否在阴影中。那些不在阴影中的点可以通过从A
发出的光线访问。其他区域则不能。如果您发现B
处于阴影中,则只需找到场景中最近的处于光照中的点。
如果您将此问题离散化为“像素”,则上述方法在大量计算机图形学文献中有非常著名的解决方案,用于阴影渲染。例如,您可以使用Shadow Map将每个像素涂上布尔标志,指示它是否在阴影中。查找最近的亮像素只需要在B
周围逐渐扩大的同心圆中进行简单搜索即可。这两个操作都可以通过利用GPU硬件而变得极其快速。
另外一点:您可以将一般的对象路径查找问题视为点路径问题。秘诀是使用Minkowski差异适当地“增加”障碍物的大小。例如,请参见这项关于机器人路径规划的工作。