判斷點在有向線段的左邊還是右邊

判斷平面上的點與有向線段的位置關係是計算幾何裏面的最基本的問題,求解該問題的算法主要運用在凸殼的構造方面,如三角形,凸多變形的構造。網上最流行的兩種判別方法是面積法和向量法,但這兩種方法本質上是一樣的。都是利用二維向量的叉乘等於三個點組成的三角形的“面積”的兩倍來計算,這裏的“面積”是一個有正有負的數值,我們剛好可以用這個值來判斷點在線段的左邊還是右邊,比如有P1,P2兩個點構成一條有向線段P1P2,我們要做的是判斷點P在P1P2的左邊還是右邊,
設向量V1=P1P2=(x1,y1), V2=PP1=(x2,y2),
則”面積”f=x1y2-x2y1.
若f>0則點P在P1P2的右側;
若f<0,則點P在P1P2的左側;
若f=0,則點P在P1P2的延長線上。
C++代碼如下:

#define Vsub(D,A,B) D.x=A.x-B.x; D.y=A.y-B.y
struct vertex
 {
     float x;
     float y;
 };
float Isleft(vertex p1, vertex p2, vertex p)
{
    vertex V1, V2;
    Vsub(V1,p1,p2);
    Vsub(V2, p, p1);
    float f = V1.x*V2.y - V2.x*V1.y;
    return f;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章