問題描述:已知兩個多邊形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,點在多邊 形外。水平 垂直交叉點數判別法 適用於任意多邊形...