HDOJ 2036 求多边形面积 向量叉积法

题目链接:点击打开链接

题目大意:按逆时针给出n个坐标,求该n边形的面积。

题目思路:利用向量叉积求n边形面积  每个三角形面积为(x1*y2-y1*x2)/2

本人第一次不是用向量法来做,把直接n边形分成n-2个三角形,最终总是过不了,一查资料才知道,多边形分凹凸多边形,凹多边形使用直接分割法,不太好做。

下面先给大家分享错误代码:(只适用与凸多边形)

/*
	把n边形分割成n-2个三角形,在求各个三角形的面积
	此方法只能求凸多边形面积
*/
import java.util.*;
class Main{
	public static void main(String args[]){
		Scanner sc=new Scanner(System.in);
		while(sc.hasNext()){
			int n=sc.nextInt();
			if(n==0){
				break;
			}
			int x1=sc.nextInt();
			int y1=sc.nextInt();
			Point p1=new Point(x1,y1);		//第一个点
			
			int x2=sc.nextInt();
			int y2=sc.nextInt();
			Point p2=new Point(x2,y2);		//第二个点
			
			double areaSum=0;							//所有三角形的面积和
			for(int i=0;i

下面是通过向量法求多边形面积:(该方法使用与任意多边形)

代码实现如下:

/*
 * 思路:		以向量方向计算
 *	把多边形分割成若干个小三角形,进行分别计算并累加,注意要按一个方向累加(逆时针或顺时针)
 * 每个小三角形的计算公式: (x1*y2-x2*y1)/2
 */

import java.util.*;
class Main{
	public static void main(String args[]){
		Scanner sc=new Scanner(System.in);
		while(sc.hasNext()){
			int n=sc.nextInt();
			if(n==0){
				break;
			}
			int x[]=new int[n];	//存放x坐标
			int y[]=new int[n];	//存放y坐标
			for(int i=0;i

你可能感兴趣的:(HDOJ水过的那些题,java,多边形面积,向量叉积法)