假设我们有在A点它想找出它是否可以移动到B点。这限制了速度,因此只能一步一个脚印的对象。 它施放在方向被移动到射线。 雷碰撞与物体,我们检测到它。 如何获得的方式安全地通过我们的射线(避免碰撞)?
顺便说一句,有没有办法让这样的事情工作目标施放的情况下,它会随着/几乎快用简单的光线投射?
有没有办法找到一些VAY路径最优?
假设我们有在A点它想找出它是否可以移动到B点。这限制了速度,因此只能一步一个脚印的对象。 它施放在方向被移动到射线。 雷碰撞与物体,我们检测到它。 如何获得的方式安全地通过我们的射线(避免碰撞)?
顺便说一句,有没有办法让这样的事情工作目标施放的情况下,它会随着/几乎快用简单的光线投射?
有没有办法找到一些VAY路径最优?
实际上是什么你问一个问题,寻路; 更具体地说,它是“任意角度寻路的问题。”
如果你能障碍物的边缘限制为一个网格,然后一个流行的解决方法就是使用*网格上,然后应用路径平滑。 然而,有一个(而近期)算法,既易于实施/理解,并给出比路径平滑效果更佳。 这就是所谓的西塔* 。
有一个很好的文章,解释西塔*(从我偷了上面的图片) 在这里
如果你不能限制你的障碍,一个网格,你必须产生一个导航网为您的地图:
有这样做,不同复杂程度的很多方面; 例如参见这里 , 这里 ,或这里 。 快速谷歌搜索也变成了大量的可用来为你做这个库,比如这一个或这一个 。
一种方法可以是使用一根绳子,或几个绳索,在绳索由线性连接几个点的。 您可以在空间随机地初始化点,但第一点是A的初始位置,最后一个点为A的最终位置。
最初,绳子将是一个非常糟糕的路线。 为了优化,移动点沿着能量梯度。 在你的情况下,能量的功能很简单,即绳索的总长度。
这不是一个新的想法,但在计算机视觉是用来探测物体的边界,虽然能量函数要复杂得多。 然而,有看“蛇”给你一个想法如何给它的两个邻国移动各点: http://en.wikipedia.org/wiki/Snake_(computer_vision )
在你的情况,但是,简单地获得来自其邻国施加的力每一点的方向会就好了。
你的问题是你考虑碰撞约束问题。 我真的会@稻谷的想法去这里使用凸包,或者为每个对象哪怕只是一球。 在后一种情况下,不动点到一个地方,它到B的距离小于半径A加B的半径加上考虑到你没有点的无限数量蒙混因素。
一个有效的解决方案要求任何邻居之间的最长距离是小于阈值,否则,两个点之间的连接线将与障碍物相交。
怎么样一个简单的方法开始与....
如果这仅仅是一个对象,你可以计算出障碍物的所有顶点,再加上开始和结束点的凸包。 然后,您可以检查两个方向由船体顺时针和逆时针遍历从A到B。 选择最短路径。
这是一个稍微复杂一些,因为你是移动的形状不只是一个点。 你不能只是一味地移动它的中心,否则会发生碰撞。 它变得更为复杂,仍移过一个顶点,因为你要吃草你的对象的边缘与障碍物的顶点。
但我们希望,给你一个想法,思考,这不是概念很难理解。
我做了这个形象,告诉我为到达目标点B.物体图像中的想法: - 深蓝色的点代表的对象。 红线是障碍。 所述灰点和线是可达到的区域。 紫色箭头是点B的方向上的对象的灰线是可见性的领域。 了解图像: - 对象将有知名度的某一领域。 这是一个二维的情况,所以我假定知名度的领域是180deg。 (能见度的人类领域参阅http://en.wikipedia.org/wiki/Human_eye#Field_of_view )对象将通过使用SONAR的想法测量距离。 有声纳的帮助对象可以找出它可以到达的区域。 使用回溯,对象可以找到出路的对象。 如果没有办法去,对象必须更改其可见的领域
看看这一种方式是作为一个阴影投射问题。 做A
的“光源”,然后再决定在场景中的每个点是否在进出阴影。 那些没有阴影是由光线进入A
。 其他地区都没有。 如果您发现B
是在阴影中,那么你只需要找到最近的点,即在光场景。
如果你离散这个问题用“像素”,那么上面的方法在上阴影渲染巨大的计算机图形的文献非常知名的解决方案。 例如,你可以使用一个阴影贴图绘制每个像素用布尔标志,表示无论是在阴影或没有。 寻找最近的亮像素仅仅是一个简单的搜索周围越来越多的同心圆B
。 这两个操作都可以由通过利用GPU硬件速度极快。
另一个注意:您可以把一般的对象路径寻找问题,因为一个点的路径问题。 秘诀就是用Minkowski差适量的“成长”的障碍。 例如,见在机器人路径规划这项工作 。