求任意多邊形面積(模板題)
阿新 • • 發佈:2019-02-12
題目描述
眾所周知的是,小X特別喜歡由線條組成的形狀,比如說凸多邊形,這一天小X正在紙上畫著喜歡的凸多邊形,這時候小Y走了過來,指著一張圖片上的多邊形,問小X知道這個圖形的面積麼,這可把小X難住了,聰明的你一定能夠幫助小X解決這個問題,對吧~
輸入描述:
多邊形上最多有六個點,順時針or逆時針給定每個點座標(兩個整數表示),保證無多餘的點並且沒有點重複。
輸出描述:
輸出一個整數,表示凸多邊形的面積,結果四捨五入。
示例1
輸入
3
0 0
1 0
2 2
輸出
1
示例2
輸入
5
-4 -2
1 -3
3 2
-1 4
-4 2
輸出
35
題意:求多邊形面積。
還有一種特殊情況的多邊形求面積:Pick公式:前提條件(以整點為頂點的任意多邊形),它內部整點數為a,它的邊上(包括頂點)的整點數為b,則它的面積S = a+b/2-1。證明推導:https://www.cnblogs.com/yujunyong/articles/2010482.html
有前提條件,所以使用有範圍限制,但在滿足條件時使用比叉積方便。
程式碼如下(模板):
#include <bits/stdc++.h> using namespace std; const int maxn=0x3f3f3f; struct node { double x; double y; }p[maxn]; int n; double fun(node a,node b) { return a.x*b.y-a.y*b.x; } int main() { while(scanf("%d", &n)!=EOF&&n!=0) { for(int i=0;i<n;i++) scanf("%lf %lf",&p[i].x,&p[i].y); double sum=0; p[n].x=p[0].x; p[n].y=p[0].y; for(int i=0;i<n;i++) { sum+=fun(p[i],p[i+1]); } sum=sum/2.0; printf("%.1f\n",abs(sum));//面積一定是正數 } return 0; }