前提提要:向量叉積以後改用 ^ 符號,過載運算子後發現表示更清晰。
friend double operator ^ (point a,point b)
1.解析幾何法:由眾多三角形的面積公式得出的結果:
(r是三角形內切圓半徑)(r是三角形外接圓半徑)
其中:2.向量叉積法:任意兩邊向量的叉積的絕對值的1/2即為三角形的面積。
code:
double ********area(v l1,v l2)
現在討論簡單多邊形,不考慮自交多邊形,計算時採用剖分思想,將其轉化為求多個三角形面積的子問題集合。
有三種轉化方法:
1.將多邊形內的一點與多邊形頂點連線,可將多邊形劃分成多個三角形,分別求出每個三角形的面積,累加起來即為多邊形的面積。
如圖,j為多邊形內一點。
2.採用三角剖分的方法,取多邊形的乙個頂點作為剖分出的三角形頂點,三角形的其他點作為多邊形上相鄰的點,
由於叉乘有正有負,所以正好可以抵消掉多餘的面積部分。面積的計算公式為:
如圖,以a點為剖分頂點。
以b點為剖分頂點。
計算得到的面積都一樣。
code:
//簡單多邊形面積,由n個點構成dots頂點集,按順序儲存。
double poly_area()
friend point operator + (const point &a,const point &b)
friend point operator - (const point &a,const point &b)
friend double operator ^ (point a,point b)
}dots[maxn];
struct v
friend v operator + (const v &a,const v &b)
friend v operator - (const v &a,const v &b)
}edge[maxn],stk[maxn];
double seare[maxn];
int n;
int parellel(const v &a,const v &b)
for(int i=1;i>a>>b;
if(a>b) swap(a,b);
if(a+1==b) continue;
res=seare[b-1]-seare[a-1];
res-=((dots[a]-dots[1])^(dots[b]-dots[1]))/2;
ans=max(ans,min(res,sum-res));
}cout<
4 20.5 0.5
10.5 0.5
10.5 10.5
0.5 10.5
1 34 2
*/
acm 凹多邊形面積 ACM 學習路線
1.學好專業課知識 理解資料庫原理 優化,計算機組成原理,概率論,線性代數,作業系統,c c 高等數學,資料結構,演算法,離散數學,網路協議,socket程式設計 編譯原理,軟體工程,設計模式,linux伺服器搭建。指令碼程式設計。stl原始碼分析,多執行緒程式設計。1.c基礎語法必須全部學完 2....
計算幾何 多邊形面積
彙總篇 計算幾何彙總 規定頂點逆時針方向的多邊形面積為正 取原點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 的...
多邊形面積
點積 a b x1 x2 y1 y2 a b cos 點積的結果是乙個數值 叉積 a b x1 y2 x2 y1 a b sin 叉積的結果也是乙個向量,是垂直於向量a,b所形成的平面,如果看成三維座標的話是在 z 軸上,上面結果是它的模。三角形的面積 向量a和 向量b的叉積的絕對值表示 以 向量a...