输入:正文和一些封闭空间。正文和空格表示为网格(或BReps,如果您愿意)。最初,身体不会与空间的边界相交。
问题是找到身体可以移动的所有可能方向。例如,在下图中,身体只能在从(-1,0)到(0,1)的方向上移动。如果body有一个圆(或球)表面 - 可以返回一些步骤的方向(例如,对于下图,输出可以是(-1,0),( - pi / 4,pi / 4),( 0,1)步骤= 3)。
输出:正文可以移动的一组方向。
问题必须在2d和3d空间中解决。
答案 0 :(得分:3)
您想要在配置空间中工作。基本上根据身体的形状增加边界的大小,然后将身体视为点对象。剩下的是身体的所有有效位置。当然,如果您的身体不是圆形并且可以旋转,那么您的配置空间不再是2D或3D。它具有与您的身体具有自由度一样多的尺寸,因此对于可以平移和旋转的刚体来说有6个尺寸。
这是机器人运动规划中众所周知的问题。 Google用于“配置空间”或“c-space”,以及“运动规划”。
这是来自卡内基梅隆大学的一组优秀幻灯片: Configuration Space Lecture
答案 1 :(得分:0)
通过表示您要测试的方向的矢量(具有非常小的幅度)(暂时)移动对象。然后在对象和环境之间运行collision detection算法。
如果没有碰撞,则物体可以朝那个方向移动。如果发生碰撞,则不能。
答案 2 :(得分:0)
我认为,身体最初不会与你的空间的边界相交。
只要身体不接触边界(或者比某个ε更接近它),你的身体就可以自由移动。
首先从有效路线的全范围[0, 2 * pi]
开始。
迭代你身体的所有顶点,并检查每个顶点,检查它是否接触到了粘合剂。如果是这样,计算接触身体的粘合段的法线,并从有效方向集中移除以负法线方向为中心的180度间隔。