#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 的...