HDU 2036改革春風が吹き荒れる(計算幾何学)
2048 ワード
Descriptionは単純なポリゴンの頂点座標を与え、その面積を求めるInput入力データには複数のテストインスタンスが含まれている.各テストインスタンスは1行を占め、各行の最初は整数n(3<=n<=100)であり、ポリゴンの辺数(もちろん頂点数)を表し、次いで反時計回りの順序で与えられたn頂点の座標(x 1,y 1,x 2,y 2...xn,yn)であり、問題を簡略化するために、ここでのすべての座標は整数で表される.入力データのすべての整数は32ビットの整数の範囲内で、n=0はデータの終わりを表して、Outputを処理しないで各テストインスタンスに対して、対応する多角形の面積を出力して、結果は小数点の後の1ビットの小数まで正確です.各インスタンスの出力が1行のSample Input 3 0 0 0 1 0 0 1 0 1 4 1 0 1-1 0-1 0 Sample Output 0.5 2.0 Solution多角形を複数の三角形に分割した後、各三角形の有向面積(フォークで乗じる)を加算して絶対値をとるとCode
#include<cstdio>
#include<iostream>
using namespace std;
struct node
{
double x,y;
}pot[111];
int main()
{
int n;
while(scanf("%d",&n),n)
{
for(int i=0;i<n;i++)
cin>>pot[i].x>>pot[i].y;
double ans=0;
for(int i=0;i<n;i++)
{
int j=(i+1)%n;
ans+=pot[i].x*pot[j].y-pot[i].y*pot[j].x;
}
ans/=2;
ans=ans>0?ans:-ans;
printf("%.1lf
",ans);
}
return 0;
}