平面中判斷點是否在某一三角形內演算法

2021-06-20 19:31:59 字數 1188 閱讀 8277

引自:

給定平面上一點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的面積。

[cpp]

#include 

#include 

using

namespace std;     

#define abs_float_0 0.0001   

struct point_float      

;     

/*** @brief 計算三角形面積

*/float get********squar(const point_float pt0, const point_float pt1, const point_float pt2)  

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

*/bool isin********(const point_float a, const point_float b, const point_float c, const point_float d)  

else

}  void main(void)  

else

2D中判斷點是否在某一三角形內演算法

給定平面上一點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...

2D中判斷點是否在某一三角形內演算法

給定平面上一點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...

判斷點是否在三角形內

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