hdu 2036(改革の春風が吹いている)
935 ワード
hdu2036
考え方:多角形面積は三角形に分割することによって計算することができ、多角形を零点で複数の三角形に分割すると、三角形が多辺行の内部にあるかどうか、すなわち三角形面積の正負を考慮しなければならず、構成された三角形は反時計回りで正であり、逆にタイミング針は負である.このことから,三角形の面積はベクトルのフォーク乗算で計算できると考えられる:0.5*|a|*|b|*sin(C)=s(面積)=ベクトルaフォークベクトルbでよい.
考え方:多角形面積は三角形に分割することによって計算することができ、多角形を零点で複数の三角形に分割すると、三角形が多辺行の内部にあるかどうか、すなわち三角形面積の正負を考慮しなければならず、構成された三角形は反時計回りで正であり、逆にタイミング針は負である.このことから,三角形の面積はベクトルのフォーク乗算で計算できると考えられる:0.5*|a|*|b|*sin(C)=s(面積)=ベクトルaフォークベクトルbでよい.
import java.util.*;
class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
while(true){
int n=sc.nextInt();
if(n==0){
break;
}
double []a=new double[n*2];
double s=0;
for(int i=0;i<n*2;i++){
a[i]=sc.nextDouble();
}
for(int i=0;i<n*2;i+=2){
if(i==n*2-2){
s+=area(a[i],a[i+1],a[0],a[1]);
}else{
s+=area(a[i],a[i+1],a[i+2],a[i+3]);
}
}
System.out.printf("%.1f",s);
System.out.println();
}
}
public static double area(double x1,double y1,double x2,double y2){
double a=(x1*y2-y1*x2)/2;//
return a;// a b=0.5*|a|*|b|*sin(C)=s( )
}
}