collision-detection - 使用 OpenCascade,如何快速对 2 个形状进行碰撞检测?

标签 collision-detection computational-geometry opencascade

使用 OpenCascade,如何对 2 个形状进行碰撞检测?可能有几种方法。一种是计算它们的交集,并检查交集结果。另一种方法是计算它们的最小距离。哪种方式更快?或者有什么更快的方法吗?非常感谢。

最佳答案

在 brep 数据结构上计算最小距离是一项相当昂贵的操作。 OCC 确实提供了用于碰撞检测的商业选项 [1]。您的其他选择可能是使用 ODE 或 Bullit 在代表 BRep 的网格上执行碰撞检测。这就是我们在 PythonOCC 项目中采用的方法,参见 [2]

[1] http://www.opencascade.org/support/products/coldet/

[2] http://www.pythonocc.org/resources/dyn/cad-and-rigid-body-simulation/

编辑:最近,我为我正在开发的离线机器人软件集成了优秀的 FCL 库 [3]。它的伟大之处在于它可以很好地处理退化网格,并且您可以非常快速地计算执行网格到网格的距离(ODE 不可能)。 python ( cython ) 绑定(bind)是一项正在进行的工作 [4] 但稳定且 python 开销几乎不明显,我可以推荐这种方法。

[3] https://github.com/flexible-collision-library/fcl

[4] https://github.com/neka-nat/python-fcl

关于collision-detection - 使用 OpenCascade,如何快速对 2 个形状进行碰撞检测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14562652/

相关文章:

Java Animation,以1x,1y的频率更新动画

javascript - Kinetic JS(用鼠标指针拖动一个球)

algorithm - 检测矩形是否与矩形边界相交的快速算法

geometry - 检测任意形状

swift - 使用 Swift 在 Sprite Kit 中进行碰撞检测

algorithm - 正交形式的密堆积

algorithm - 从椭圆到静态多边形集的距离

c++ - 将 TopoDS_Face 对象分配给其子对象编译时没有错误,但有 3 个 valgrind 错误

c++ - 斜齿轮结构 : Sweep Profile with Spin (twist)

c++ - 如何让 MFC 应用程序从命令行阻止?