判斷二維座標系中任意乙個點是否在三角形內

2021-08-09 17:18:34 字數 1062 閱讀 2232

給定平面上一點p(x0,y0),判斷該點是否在三角形abc中,三角形頂點座標分別為a(xa,xb),b(xb,yb),c(xc,yc)。可以使用面積法來判斷,方法如下:其中s(a,b,c)表示三角形abc的面積。

1、 若abs( s(a,b,c) ) = abs( s(p,b,c) ) + abs( s(a,p,c) ) + abs( s(a,b,p) ) ,則p在三角形abc的內部或邊上;如果還有abs( s(p,b,c) )、abs( s(a,p,c) ) 和abs( s(a,b,p) )全都大於0,則說明p在三角形abc的內部,否則p在三角形abc的邊上,具體為:s(p,b,c)為0,則說明p在bc邊上,s(a,p,c)為0,則說明p在ac邊上,s(a,b,p)為0,則說明p在ab邊上;

2、 若abs( s(a,b,c) ) < abs( s(p,b,c) ) + abs( s(a,p,c) ) + abs( s(a,b,p) ) ,則p在三角形abc的外部;

3、 對abs( s(a,b,c) ) > abs( s(p,b,c) ) + abs( s(a,p,c) ) + abs( s(a,b,p) ) 情況在理論上是不存在的

此處又引出另乙個問題,如何求平面中三角形的面積?這個可以使用叉乘法來實現,即s(a,b,c)為向量ab叉乘ac所得向量模的1/2,再對該值求絕對值就是三角形abc的面積。

#include 

#include

#define abs_float_0 0.0001

struct point_float;/*

* 計算三角形面積

*/float get********squar(point_float pf0, point_float pf1, point_float pf2)

/* * 判斷給定一點是否在三角形內或邊上

*/int isin********(point_float a, point_float b, point_float c, point_float d)

else

}int main(void)

else

return 0

;}

判斷乙個二維陣列的資料是否在另外乙個二維陣列裡重複

當我最先碰到這個問題是工作中批量匯入資料,防止裡面有資料跟資料庫裡原有的重複。大多數人想到的是挨個迴圈對比,感覺這樣速度有點慢,所以根據php函式來解決的 new cand idcard array column cands,cand idcard array column 先把要匯入的二維陣列,根...

從二維陣列中查詢乙個數,判斷是否存在

乙個二維陣列,沒每一行都按照從左到右遞增的順序排序,每乙個列都按照從上到下遞增的排序,設計乙個函式,輸入乙個這樣的陣列和乙個整數,判斷陣列中是否含有該整數。例如下面陣列,查詢數字7返回true,查詢5,返回false 1,2,8,9 2,4,9,12 4,7,10,13 6,8,11,15 一種思路...

判斷乙個點是否在RotatedRect中

opencv函式pointpolygontest c double pointpolygontest inputarray contour,point2f pt,bool measuredist 用於判斷乙個點是否在輪廓中 當measuredist設定為true時,若返回值為正,表示點在輪廓內部,返...