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

如何检测圆与圆弧线段是否相交?(Lua及圆形障碍物寻路相关)

圆弧与圆的相交检测方案(圆形障碍物寻路场景)

我们需要检测圆弧AB(由圆心C、圆弧半径R、起始角angle1、终止角angle2定义)与圆D(圆心D、半径r)的相交/交叉情况。常规的两圆相交判断(仅检查圆心距d < R + r且d > |R - r|)无法区分圆D是和圆弧段相交,还是仅和圆弧所在的完整圆相交但未触及圆弧部分,因此需要更精准的分层检测逻辑:

分步检测逻辑

1. 快速排除无相交可能的情况

先通过基础几何判断过滤掉完全不相交的场景:

  • 若两圆心距离 d > R + r:两图形完全分离,无相交
  • 若 d < |R - r|:其中一个圆完全包含另一个,需进入后续细分判断

2. 计算两圆的交点(若存在)

联立两圆的方程,求解交点坐标:
设圆心C坐标为(xc,yc),圆D坐标为(xd,yd),则两圆方程为:

(x - xc)² + (y - yc)² = R²
(x - xd)² + (y - yd)² = r²

联立后可解得0个(无交点)、1个(相切)或2个交点。

3. 判断交点是否落在圆弧的角度区间内

对每个交点P,执行以下判断:

  • 计算向量CP与x轴正方向的夹角θ(注意处理角度的正负和360°循环)
  • 判断θ是否处于圆弧的有效角度范围内:
    • 若angle1 ≤ angle2:检查θ是否在[angle1, angle2]区间内
    • 若angle1 > angle2(圆弧跨0°):检查θ是否在[angle1, 360°]或[0°, angle2]区间内
  • 只要有一个交点落在该区间内,即可判定圆弧AB与圆D相交

4. 覆盖特殊边界场景

  • 圆弧端点与圆D相交:计算端点A到D的距离是否等于r,或端点B到D的距离是否等于r,若是则判定相交
  • 圆完全包含圆弧段:若d + R ≤ r(圆D完全包裹圆弧所在圆),直接判定相交;若d + r ≤ R(圆弧所在圆完全包裹圆D),则需检查圆弧段上是否存在点到D的距离等于r(可通过计算角度区间内的极值点距离来判断)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 16:12:14