計算幾何 多邊形交集

2021-09-26 02:21:21 字數 1011 閱讀 8126

問題描述:已知兩個多邊形poly1和poly2,分別由點集c1=和c2=表示,求這兩個多邊形的交集。

演算法思想:

兩個多邊形相交後,其頂點要麼是兩個多邊形邊的交點,要麼是在多邊形內部的點。

演算法步驟:

1.計算兩個多邊形每條邊之間的交點。

2.計算包含在多邊形內部的點。

3.將交點和多邊形內部的點,按逆時針(或順時針)排序,得出最終的點集。

**基本實現如下:

1 typedef struct

point

2point;

6bool polygonclip(const vector&poly1,const vector&poly2, std::vector&interpoly)712

13long

x,y;

14//

計算多邊形交點

15for (int i = 0;i < poly1.size();i++)

1627}28

}2930//

計算多邊形內部點

31for(int i = 0;i < poly1.size();i++)

3237}38

for (int i = 0;i < poly2.size();i++)

3944}45

46if(interpoly.size() <= 0)47

return

false;48

49//

點集排序

50clockwisesortpoints(interpoly);

51return

true

;52 }

**分析:

求多邊形交集,主要由計算多邊形交點、計算多邊形內部點、點集排序三部分組成,主要由以下三個函式完成。

getcrosspoint(),求線段交點,參考:

ispointinpolygon(),判斷點是否在多邊形內部,參考:

clockwisesortpoints(),點集排序,參考:

計算幾何 多邊形交集

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

計算幾何 多邊形

判定凸多邊形 頂點凹凸性法 判斷點在凸多邊形內外 與判定凸多邊形差不多,用判斷點與多邊形兩頂點叉乘,都大於0,點在多邊形內,小於0,點在多邊形外。水平 垂直交叉點數判別法 適用於任意多邊形包括凹凸邊形 注意到如果從p作水平向左的射線的話,如果p在多邊形內部,那麼這條射線與多邊形的交點必為奇數,如果p...

計算幾何 多邊形筆記

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