判斷線段和圓是否相交
判斷圓和線段相交,分兩種情況:
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...