You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pymunk中ContactPoint与ContactPointSet.points的区别及相关疑问

Pymunk碰撞接触点与距离疑问解答

1. ContactPoint中point_a/point_b对应的形状

  • Arbiter对象的shape_a和shape_b对应碰撞的两个形状,顺序固定(和你设置碰撞处理时的形状对一致)。
  • 每个ContactPoint里的point_a是Arbiter.shape_a表面的接触位置,point_b是Arbiter.shape_b表面的接触位置。
  • 由于ContactPointSet.points最多包含2个ContactPoint实例,所以会出现最多4个点——每一对(point_a, point_b)对应一个接触位置在两个形状上的各自映射。

2. ContactPoint与ContactPointSet的distance区别

  • ContactPoint.distance:单个接触点处两个形状的穿透距离(重叠时为负值,正值表示物体接近但未接触),这是该接触点的精确距离/穿透深度。
  • ContactPointSet.distance:是所有接触点distance的综合参考值(通常为平均值),用来表示整体碰撞的穿透程度,若需要单个接触点的细节,直接用对应ContactPoint的distance即可。

3. 为什么一个ContactPoint包含两个点?

  • 两个碰撞物体的接触位置在各自表面的坐标并不一定重合——尤其是存在穿透时,两个形状的“接触点”是各自表面上对应碰撞位置的点。
  • 举个例子:圆形碰撞矩形侧面时,圆形上的接触点是圆周上的某点,矩形上的接触点是侧面的对应点,这两个点的连线方向就是碰撞法向量方向,distance就是这两个点在法向量上的距离(负值代表重叠深度)。
  • 本质上,point_a和point_b是同一碰撞接触事件在两个物体表面的“对应点”,用来分别标记每个物体上的接触位置。

内容的提问来源于stack exchange,提问作者baronch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 21:19:58