計算幾何 多邊形交集

2021-09-25 18:32:46 字數 1142 閱讀 5500

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

演算法思想:

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

演算法步驟:

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

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

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

**基本實現如下:

1 typedef struct point

2 point;

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

7 12

13 long x,y;

14 //計算多邊形交點

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

16

27 }

28 }

29 30 //計算多邊形內部點

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

32

37 }

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

39

44 }

45

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

47 return false;

48

49 //點集排序

50 clockwisesortpoints(interpoly);

51 return true;

52 }

**分析:

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

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

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

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

計算幾何 多邊形交集

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

計算幾何 多邊形

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

計算幾何 多邊形筆記

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