如何检查光线是否与二维几何中的圆相交?

How to check if a ray intersects with a circle in 2D geometry?

提问人:Casper 提问时间:5/19/2023 更新时间:5/19/2023 访问量:228

问:

我有一个圆心 (X,Y) 和半径 R 还有一条从圆心到终点的射线(Xr,Yr)(否则 100 个单位形成圆心)

我还有另一个圆,中心位于 (a,b) 和半径 c

我需要找出光线是否触及另一只 cicle

任何人请帮我处理这个实际案例

我尝试过矢量和圆距离方程,但没有任何效果

数学 矢量 游戏开发 射线 半径

评论

1赞 Yunnosch 5/19/2023
“我尝试过向量和圆距离方程”,请在这里显示一个最小的可重复示例。“没有任何效果”,请使用检查器和您使用 MRE 代码获得的结果。
1赞 samgak 5/19/2023
如果它以点 Xr、Yr 结束,那么它就不是射线,而是线段。光线从一个点开始,向一个方向无限延伸。很抱歉迂腐,但在搜索合适的算法时,您需要精确使用术语。

答:

1赞 MBo 5/19/2023 #1

获取射线的单位方向矢量

dx = (Xr-Xc)/R
dy = (Yr-Yc)/R

并计算从直线(包含射线)到第二个圆心的距离(使用叉积):

Dist = Abs((a-Xc)*dy - (b-Yc)*dx)

然后将这个距离与第二个半径进行比较,还要确保使用标量积将光线定向到圆:

if (Dist < R2)
    if ((a-Xc)*dx + (b-Yc)*dy > 0)
         intersection exists

注意 - 如果第二个圆圈可能很大,可能会遮挡第一个圆圈等,我们需要更复杂的检查

1赞 fana 5/19/2023 #2

为简单起见,我以原点在世界上描述以下内容。即所有仓位都抵消为(X,Y)

  • (X,Y) <= (0,0)
  • (Xr,Yr) <= (Xr-X,Yr-Y)
  • (a,b)<=(a-X,b-Y)

在这里,使用标量,交点方程为

(表示“2 个位置之间的距离且相等
t(t*Xr - a)^2 + (t*Yr - b)^2 = c^2t*(Xr,Yr)(a,b)c")

求解这个二次方程,您知道交点的数量及其位置。

然后,如果您所说的“射线”线是线段(范围有限),请检查是否至少有一个获得的点在范围内。否则(如果“ray”是射线),应该检查的只是符号。t