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

如何计算运动圆形Circle C与矩形Rectangle R的碰撞点?

运动圆形与静止矩形的碰撞点计算方法

核心思路

把动态碰撞问题转化为静态相交问题:给矩形反向施加圆形的速度矢量,相当于将矩形做对应平移,问题就等价于静止圆形与平移后的矩形的静态相交检测,找到最早的碰撞时刻后,再反推碰撞点。

具体步骤

1. 明确基础参数

  • 圆形C:圆心坐标(cx, cy),半径r,速度矢量(vx, vy)
  • 矩形R(以轴对齐为例):边界坐标x_min、x_max、y_min、y_max(若为旋转矩形,先通过坐标变换转为轴对齐场景)

2. 计算有效碰撞时间

分别计算圆形与矩形四条边的潜在碰撞时间,筛选出最早的有效时间t_hit(t需≥0,且为所有可行解中的最小值):

  • 碰撞左边界(x=x_min):仅当vx<0时可能,t_left = (x_min - r - cx)/vx
  • 碰撞右边界(x=x_max):仅当vx>0时可能,t_right = (x_max + r - cx)/vx
  • 碰撞下边界(y=y_min):仅当vy<0时可能,t_bottom = (y_min - r - cy)/vy
  • 碰撞上边界(y=y_max):仅当vy>0时可能,t_top = (y_max + r - cy)/vy

从所有符合条件的t中取最小值即为碰撞时刻,若无符合条件的t,判定无碰撞。

3. 推导碰撞点

根据t_hit对应的边界,直接计算碰撞点坐标:

  • 碰撞左/右边界:x坐标为x_min - r或x_max + r,y坐标为cy + vy*t_hit
  • 碰撞上/下边界:y坐标为y_max + r或y_min - r,x坐标为cx + vx*t_hit

4. 特殊情况处理

  • 圆形初始已与矩形重叠:此时t_hit=0,碰撞点取圆形与矩形的静态交点
  • 圆形速度方向远离矩形:直接判定无碰撞

简化技巧

  • 无需遍历所有四条边,仅计算圆形朝向的1-2条边界的碰撞时间,减少计算量
  • 旋转矩形可通过逆旋转变换,将圆形、速度矢量与矩形统一转为轴对齐场景,计算完成后再做逆向变换还原坐标

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 23:03:10