hdu 2036(改革の春風が吹いている)

935 ワード

hdu2036
考え方:多角形面積は三角形に分割することによって計算することができ、多角形を零点で複数の三角形に分割すると、三角形が多辺行の内部にあるかどうか、すなわち三角形面積の正負を考慮しなければならず、構成された三角形は反時計回りで正であり、逆にタイミング針は負である.このことから,三角形の面積はベクトルのフォーク乗算で計算できると考えられる: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(  )
	}
}