計算幾何 多邊形

2021-06-28 17:59:22 字數 1065 閱讀 3985

判定凸多邊形:頂點凹凸性法

判斷點在凸多邊形內外:

①:與判定凸多邊形差不多,用判斷點與多邊形兩頂點叉乘,都大於0,點在多邊形內,小於0,點在多邊形外。

②:水平/垂直交叉點數判別法(適用於任意多邊形包括凹凸邊形)

注意到如果從p作水平向左的射線的話,如果p在多邊形內部,那麼這條射線與多邊形的交點必為奇數,如果p在多邊形外部,則交點個數必為偶數(0也在內)。所以,我們可以順序考慮多邊形的每條邊,求出交點的總個數。還有一些特殊情況要考慮。

判斷線段在任意多邊形內:

(1)首先,要判斷一條線段是否在多邊形內,先要判斷線段的兩個端點是否在多邊形內。如果兩個端點不全在多邊形內,那麼,線段肯定是不在多邊形內的。

(2)其次,如果線段和多邊形的某條邊內交(兩線段內交是指兩線段相交且交點不在兩線段的端點),則線段肯定不在多邊形內。

(3)如果多邊形的某個頂點和線段相交,則必須判斷兩相交交點之間的線段是否包含於多邊形內。

求多邊形重心:

以第乙個頂點為基準,分別連線p[i],p[i+1],1

具體**實現:

#include #include #include #define maxn 1000

#define offset 10000

#define eps 1e-8

#define zero(x) (((x)>0?(x):-(x))eps?1:((x)<-eps?2:0))

using namespace std ;

struct pointp[maxn];

struct line;

double xmult(point p1,point p2,point p0) //計算向量p1p2,p2p3的叉積

int is_convex(int n,point* p) //判定凸多邊形,頂點按順時針或逆時針給出,允許相鄰邊共線

; for (i=0;ieps)

if (fabs(t1)>eps)

ret.x/=t1,ret.y/=t1;

return ret;

}int main()

計算幾何 多邊形筆記

計算下乙個前後所組成向量的階乘,如果在計算時,出現負值,則此多邊形是凹多邊形,如果所有頂點計算完 畢,其結果都大於0,則多邊形是凸多邊形。判斷點在凸多邊形內外 與判定凸多邊形差不多,用判斷點與多邊形兩頂點叉乘,都大於0,點在多邊形內,小於0,點在多邊 形外。水平 垂直交叉點數判別法 適用於任意多邊形...

計算幾何 多邊形面積

彙總篇 計算幾何彙總 規定頂點逆時針方向的多邊形面積為正 取原點0 0,0 s a,b,c,d s o,a,b s o,b,c s o,c,d s o,d,a 圖中o在外部,obc,ocd,oda 全部是正的,加起來構成了5變形 obcda 的面積,但 oab是負面積,因此最後剛好等於 abcd 的...

計算幾何 多邊形交集

問題描述 已知兩個多邊形poly1和poly2,分別由點集c1 和c2 表示,求這兩個多邊形的交集。演算法思想 兩個多邊形相交後,其頂點要麼是兩個多邊形邊的交點,要麼是在多邊形內部的點。演算法步驟 1.計算兩個多邊形每條邊之間的交點。2.計算包含在多邊形內部的點。3.將交點和多邊形內部的點,按逆時針...