算法:判斷點在直線的左右哪一側


判斷 某一點在直線左右側

方法一:
左右方向是相對前進方向的,只要指定了前進方向就可以知道左右(比如指定前進方向是從直線的起點到終點).判斷點在直線的左側還是右側是計算幾何里面的一個最基本算法.使用矢量來判斷.
定義:平面上的三點P1(x1,y1),P2(x2,y2),P3(x3,y3)的面積量:

S(P1,P2,P3)=|y1 y2 y3|= (x1-x3)*(y2-y3)-(y1-y3)*(x2-x3)

當P1P2P3逆時針時S為正的,當P1P2P3順時針時S為負的。

令矢量的起點為A,終點為B,判斷的點為C,
如果S(A,B,C)為正數,則C在矢量AB的左側;
如果S(A,B,C)為負數,則C在矢量AB的右側;
如果S(A,B,C)為0,則C在直線AB上。

 

方法二:

它可以用來判斷點在直線的某側。進而可以解決點是否在三角形內,兩個矩形是否重疊等問題。向量的叉積的模表示這兩個向量圍成的平行四邊形的面積。
設矢量P = ( x1, y1 ),Q = ( x2, y2 ),則矢量叉積定義為由(0,0)、p1、p2和p1+p2所組成的平行四邊形的帶符號的面積,即:P×Q = x1*y2 - x2*y1,其結果是一個偽矢量。
顯然有性質 P × Q = - ( Q × P ) 和 P × ( - Q ) = - ( P × Q )。
叉積的一個非常重要性質是可以通過它的符號判斷兩矢量相互之間的順逆時針關系:
若 P × Q > 0 , 則P在Q的順時針方向。
若 P × Q < 0 , 則P在Q的逆時針方向。
若 P × Q = 0 , 則P與Q共線,但可能同向也可能反向。
叉積的方向與進行叉積的兩個向量都垂直,所以叉積向量即為這兩個向量構成平面的法向量。
如果向量叉積為零向量,那么這兩個向量是平行關系。

因為向量叉積是這兩個向量平面的法向量,如果兩個向量平行無法形成一個平面,其對應也沒有平面法向量。所以,兩個向量平行時,其向量叉積為零。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM