判斷線段是否與圓相交模板

2021-08-18 18:00:58 字數 1166 閱讀 9502

判斷線段和圓是否相交

判斷圓和線段相交,分兩種情況:

1. 如圖a所示,當圓心與線段的距離大於圓的半徑時,線段與圓肯定不相交

推導過程:

此處補充直線方程的五種形式:

一般式為ax+by+c=0,它的優點就是它可以表示平面上的任意一條直線,僅此而已.

斜截式y=kx+b,就不能表示垂直x軸的直線x=a.

點斜式y-y0=k(x-x0),也不能表示垂直x軸的直線x=a

兩點式(y-y1)/(y2-y1)=(x-x1)/(x2-x1).不能表示兩點x1=x2或y1=y2時的直線(即垂直或水平直線)

截距式x/a+y/b=1不能表示截距為0時的直線,比如正比例直線.

再補充一下餘弦定理:

這樣的話,根據餘弦定理的向量求法,cosa=(x0-x1)(x2-x1)+(y0-y1)(y2-y1)  (省略了分母部分,因為分母是正數)

直線的兩個點都在圓外的模板:

bool judge(node a, node b)//判斷線段是否與圓相交

else if(a.y == b.y)

else

//點到直線的距離,判斷直線是否可以與圓相交

num1 = al*c.x + bl*c.y + cl;

num1 *= num1;

num2 = r*r*(al*al+bl*bl);

if(num2 < num1)

//向量的計算

ll angle1 = (c.x-a.x)*(b.x-a.x) + (c.y-a.y)*(b.y-a.y);//線段與圓是否相交的條件

ll angle2 = (c.x-b.x)*(a.x-b.x) + (c.y-b.y)*(a.y-b.y);

if(angle1>0 && angle2>0)

return 0;

}

利用向量判斷線段和圓是否相交

面試的時候被問到如何判斷扇形和圓是否相交,當時也是比較懵的,刷leetcode不會碰到這種問題。我大概分了幾個情況進行討論,並且用到了求點到直線的距離公式。面試官後來提示說從幾何的角度考慮,最好不要去用方程求解的角度去想,大概想到了向量點乘和叉乘,但是當時沒寫出來。後來在網上看部落格大部分也都是去解...

C 判斷線段是否相交

c 判斷線段是否相交 線段是否相交,一種是從幾何上就是判斷兩個線段有沒有交點,還有一種是通過向量叉乘 也就是向量積 來判斷。因為向量叉乘的結果是乙個垂直於原來兩個向量的新向量,可以簡單的理解為垂直於原來兩向量所在平面的向量。我們來看圖。線段是否相交 線段p1p2的p1點 線段p1p2的p2點 線段q...

C 判斷線段是否相交

線段是否相交,一種是從幾何上就是判斷兩個線段有沒有交點,還有一種是通過向量叉乘 也就是向量積 來判斷。因為向量叉乘的結果是乙個垂直於原來兩個向量的新向量,可以簡單的理解為垂直於原來兩向量所在平面的向量。我們來看圖 線段是否相交 線段p1p2的p1點 線段p1p2的p2點 線段q1q2的q1點 線段q...