計算兩個多邊形的重疊面積

2021-10-08 19:41:31 字數 2075 閱讀 6650

#include #include #include using namespace std;

const int maxn = 300;

const double eps = 1e-6;

//位置標識

int dcmp(double x)

struct point

;double cross(point a, point b, point c)

//計算線段ab和cd的交點座標

point intersection(point a, point b, point c, point d)

//計算多邊形面積,將多邊形拆解成連續三個頂點組合成的多個三角形進行計算,這個迴圈計算一次其實是計算兩次多邊形的面積。

double polygonarea(point p, int n)

s += p[n - 1].y * (p[n - 2].x - p[0].x);

cout << "s =" << s << endl;

return fabs(s * 0.5);

}double cpia(point a, point b, int na, int nb) //convexpolygonintersectarea

else

for(int j = tn = 0; j < nb; j++, sflag = eflag)

if (i == na - 1) else

} else else

}if((sflag ^ eflag) == -2) else

} else else }}

}memcpy(p, tmp, sizeof(point) * tn);

nb = tn, p[nb] = p[0];

}if(nb < 3) return 0.0;

return polygonarea(p, nb);

}double spia(point a, point b, int na, int nb) //******polygonintersectarea 呼叫此函式

}cout << "sum::res=" <>n1>>n2)

return 0;

}

polygonintersectarea(ipc_point_t *a, ipc_point_t *b, int na, int nb):計算兩個三角形重疊部分的面積。

ipc_point_t *a:取自檢測區域三個點組成的乙個三角形點的陣列

ipc_point_t *b:取自檢測目標三個點組成的乙個三角形點的陣列

int na:陣列a的數量,也就是三角形點的數量

int nb:陣列b的數量,也就是三角形點的數量

這個介面方法的設計思想:

1) 方法形參中的陣列a和b實則上是可以理解為組成的三角形a和b,並設定乙個臨時陣列p用來儲存兩個三角形重疊部分的頂點座標,陣列p的初始值為陣列b的拷貝。

2) 從三角形 a中取出一條邊(也就是陣列a裡面的兩個點),將a中的一條邊與陣列p的其中一條邊進行計算,計算兩條邊是否有交點,如果有交點就將該交點拷貝放到陣列p中,如果沒有交點並且p取中的點在a中取出兩個點組成的向量線段的右側,也將該點拷貝到陣列p中,這個時候的陣列p可能包含多個交點,組成的是乙個多邊形,這樣第一輪下來就是三角形a中的其中一條邊與陣列p中的每一條邊(即三角形b中的三條邊)都會進行一次計算是否有交點。

3) 迴圈依次從三角形a中其他邊,與新的陣列p依次根據第 2)步驟進行計算。

4) 三角形a的每個邊都與每次得到的新陣列p比較結束之後,如果新陣列p內的點的個數大於等於3,計算這個新陣列p內所有點組成的多邊形的面積。

intersection(ipc_point_t a, ipc_point_t b, ipc_point_t c, ipc_point_t d):計算兩個線段的交點

兩個線段的頂點分別為(a, b), (c, d)

polygonarea(ipc_point_t *p, int n):計算多邊形的面積,將多邊形拆解成連續三個頂點組合成的多個三角形進行計算,這個迴圈計算一次其實是計算兩次多邊形的面積。

ipc_point_t *p:多邊形的頂點集合

int n:多邊形的頂點數

計算多邊形的面積

題目 輸入乙個點列,順次連線成乙個封閉多邊形,計算多邊形的面積 分析 方法一,計算面積可以考慮定積分的形式,定積分有正有負,順次求和,重複部分相互抵消,最後剩下的總面積的絕對值就是多邊形的面積。從線性積分後的結果可以容易的看出,直線段的積分實際上就是求該直線段與x軸所圍成的區域的梯形的面積int p...

求兩個多邊形的交面積(模板)

別人的部落格 多邊形的交,多邊形的邊一定是要按逆時針方向給出 還要判斷是凸包還是凹包,呼叫相應的函式 面積並,只要和面積減去交即可 include using namespace std const int maxn 300 const double eps 1e 8 int dcmp double...

計算幾何 多邊形面積

彙總篇 計算幾何彙總 規定頂點逆時針方向的多邊形面積為正 取原點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 的...