提问人:Casper 提问时间:5/19/2023 更新时间:5/19/2023 访问量:228
如何检查光线是否与二维几何中的圆相交?
How to check if a ray intersects with a circle in 2D geometry?
问:
我有一个圆心 (X,Y) 和半径 R 还有一条从圆心到终点的射线(Xr,Yr)(否则 100 个单位形成圆心)
我还有另一个圆,中心位于 (a,b) 和半径 c
我需要找出光线是否触及另一只 cicle
任何人请帮我处理这个实际案例
我尝试过矢量和圆距离方程,但没有任何效果
答:
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^2
t*(Xr,Yr)
(a,b)
c
")
求解这个二次方程,您知道交点的数量及其位置。
然后,如果您所说的“射线”线是线段(范围有限),请检查是否至少有一个获得的点在范围内。否则(如果“ray”是射线),应该检查的只是符号。t
评论