澄清 pymunk 中的碰撞
Clarification of collisions in pymunk
我一直在研究 Pymunk 作为空间化学模拟的可能平台。我天真地认为当两个形状碰撞时会有一个接触点。事实上,最多可以有两个接触点。我还发现每个接触点有两个点,point_a和point_b。 documentation 说
point_a and point_b are the contact position on the surface of each
shape
不知道有没有比我天真的人能解释一下:
- 为什么ContactPointSet只能包含一个或两个接触点
而不是三个或更多?
- 为什么给定的 point_a 和 point_b
ContactPoint 不一定是同一个点,因为它们是点
两个形状之间在哪个位置发生接触?
- 是point_a的形状
保证是 arbiter.shapes[0] 和 point_b 的形状
保证是 arbiter.shapes[1],还是我需要检查一下?
谢谢。
我对碰撞算法的了解还不够,无法从数学背景上回答,但我可以在途中提供一些帮助:
这是使用的碰撞算法。对于简单的(例如圆到圆)碰撞,只找到一个点,如您在此处看到的:https://github.com/slembcke/Chipmunk2D/blob/master/src/cpCollision.c#L526
在更高级的情况下,例如Poly to Poly,然后使用GJK & EPA算法,https://github.com/slembcke/Chipmunk2D/blob/master/src/cpCollision.c#L607这样可以产生一两个点。
我想原因如下图所示。这些点位于每个形状上,并且由于它们可以重叠,所以每个形状都有一个点很自然。
- 我怀疑是这样,但不是 100% 确定。
如果您对 GJK 和 EPA 的实施感兴趣,这里有一个介绍性博客 post 从它首次引入 Chipmunk 时起:http://howlingmoonsoftware.com/wordpress/enhanced-collision-algorithms-for-chipmunk-6-2/
我一直在研究 Pymunk 作为空间化学模拟的可能平台。我天真地认为当两个形状碰撞时会有一个接触点。事实上,最多可以有两个接触点。我还发现每个接触点有两个点,point_a和point_b。 documentation 说
point_a and point_b are the contact position on the surface of each shape
不知道有没有比我天真的人能解释一下:
- 为什么ContactPointSet只能包含一个或两个接触点 而不是三个或更多?
- 为什么给定的 point_a 和 point_b ContactPoint 不一定是同一个点,因为它们是点 两个形状之间在哪个位置发生接触?
- 是point_a的形状 保证是 arbiter.shapes[0] 和 point_b 的形状 保证是 arbiter.shapes[1],还是我需要检查一下?
谢谢。
我对碰撞算法的了解还不够,无法从数学背景上回答,但我可以在途中提供一些帮助:
这是使用的碰撞算法。对于简单的(例如圆到圆)碰撞,只找到一个点,如您在此处看到的:https://github.com/slembcke/Chipmunk2D/blob/master/src/cpCollision.c#L526 在更高级的情况下,例如Poly to Poly,然后使用GJK & EPA算法,https://github.com/slembcke/Chipmunk2D/blob/master/src/cpCollision.c#L607这样可以产生一两个点。
我想原因如下图所示。这些点位于每个形状上,并且由于它们可以重叠,所以每个形状都有一个点很自然。
- 我怀疑是这样,但不是 100% 确定。
如果您对 GJK 和 EPA 的实施感兴趣,这里有一个介绍性博客 post 从它首次引入 Chipmunk 时起:http://howlingmoonsoftware.com/wordpress/enhanced-collision-algorithms-for-chipmunk-6-2/