线和圆的交叉点

时间:2012-07-16 16:54:51

标签: matlab line geometry

  

可能重复:
  intersection of line and circle with different slope

我的行由pp=randi([-400 400],2,2)然后x=pp(:,1)y=pp(:,2)绘制。我有一个圆心,中心(a,b)半径为r

我想检查圆和线的交点。

我使用polyfit命令来检查斜率和截距。然后我使用lincirc命令,但问题是如果线只穿过一个点,那么另一个点也会显示。

例如,如果线穿过一侧并在中间停止,则它也会显示另一个不会越过边界的点

1 个答案:

答案 0 :(得分:1)

圆心半径r以(a,b)为中心。你有一条线。如果绘制了这些点,则必须将数据存储在x和y向量中,因此将每个元素的第一个和最后一个作为(x,y)坐标。第一对形成线起点,最后一对形成终点。将这些点称为(c1,d1)和(c2,d2)。假设你的lincirc函数告诉你线和圆之间有2个交点,计算

A1 = (c1-a,d1-b)
A2 = (c2-a,d2-b)

现在如果

norm(A1,2) < r

然后端点(c1,d1)在你的圈内,如果

norm(A2,2) < r

然后端点(c2,d2)在你的圈内。

如果其中一个点在圆圈内,那么您只有一个交叉点。

如果两个点都不在圆圈内,那么你知道你的线穿过圆圈两次(假设你的lincirc函数告诉你有两个点)

如果两个点都在圆圈内,那么你的lincirc函数就在你身边。