判斷點是否在三角形內

2021-07-11 11:46:11 字數 1011 閱讀 2278

1.面積法

如果三角形pab、pac和pbc的面積之和與三角形abc的面積相等,則可判定點p在三角形abc內(包括在三條邊上)。

已知三角形頂點a、b、c)的座標分別為(ax, ay)、(bx, by)、(cx, cy),即可計算其面積:

s = (ax * by + bx * cy + cx * zy - ay * bx - by * cx - cy * ax) / 2

2.線段法

如果線段pa與線段bc、或者線段pb與線段ac、或者線段pc與線段ab有交點,則可判定點p在三角形之外。

如果點p到ab的距離比c到ab的距離短,並且點p到ac的距離比b到ac的距離短,並且點p到bc的距離比a到bc的距離短,則可以判定點p在三角形內。

3.向量法

設三邊方程bc:fa(x,y)=0,ac:fb(x,y)=0,ab:fc(x,y)=0

以bc為例,在三角形內的點必須與點a在bc的同側,對於點p(x,y)在三角形內首先要滿足fa(x,y)*fa(ax, ay)>0,其他邊也同理,所以只要比較fa(x,y)*fa(ax, ay)、fb(x,y)*fb(bx, by)、fc(x,y)*fc(cx, cy)

這三個數的正負性

1)三個數都是正數:d在三角形內

2)至少有乙個負數:d在三角形外

3)有且只有乙個0,另兩個為正數:在三角形邊上

4)有且只有乙個0,乙個正數乙個負數:在三角形邊的延長線上,也算在三角形外,因為滿足2

5)有二個0:在三角形的頂點上

6)不可能出現3個0,或3個負數,或乙個0兩個負數的情況

4.同向法

假設點p位於三角形內,沿著abca的方向在三條邊上行走時,點p始終位於邊ab,bc和ca的右側。當選定線段ab時,點c位於ab的右側,同理選定bc時,點a位於bc的右側,最後選定ca時,點b位於ca的右側,所以當選擇某一條邊時,我們只需驗證點p與該邊所對的點在同一側即可。判斷兩個點在某條線段的同一側可以通過叉積來實現,連線pa,將pa和ab做叉積,再將ca和ab做叉積,如果兩個叉積的結果方向一致,那麼兩個點在同一側。

判斷點是否在三角形內

概述 給定三角形abc和一點p x,y,z 判斷點p是否在abc內。這是遊戲設計中乙個常見的問題。需要注意的是,這裡假定點和三角形位於同乙個平面內。本文介紹三種不同的方法,由淺入深 一 內角和法 連線點p和三角形的三個頂點得到三條線段pa,pb和pc,求出這三條線段與三角形各邊的夾角,如果所有夾角之...

判斷點是否在三角形內

給定三角形abc和一點p x,y,z 判斷點p是否在abc內。這是遊戲設計中乙個常見的問題。需要注意的是,這裡假定點和三角形位於同乙個平面內。本文介紹三種不同的方法,由淺入深 連線點p和三角形的三個頂點得到三條線段pa,pb和pc,求出這三條線段與三角形各邊的夾角,如果所有夾角之和為180度,那麼點...

判斷點是否在三角形內

問題 在二維座標系中,已知三角形頂點的座標,那麼對於座標系中的任意一點p,判斷是否在三角形內?double area point a,point b,point c bool is point a,point b,point c,point d 設s area abc s1 area abd s2 ...