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

来源:互联网 发布:字体转换器软件下载 编辑:程序博客网 时间:2024/06/08 08:48

题目链接:点击打开链接

题目大意:按逆时针给出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<n-2;i++){int x3=sc.nextInt();   int y3=sc.nextInt();Point p3=new Point(x3,y3);//第三个点areaSum+=p1.area(p2,p3);//求(p1,p2,p3)三个点的面积,areaSum累加p2=p3;//把p3赋值给p2,在把新传入的点记为p3}System.out.println(String.format("%.1f",areaSum));}}}class Point{//Point类 x,y坐标public int x;public int y;public Point(int x,int y){this.x=x;this.y=y;}public double length(Point p1,Point p2){//求2点之间的距离return Math.sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));}public double area(Point p1,Point p2){//求3个点(p1,p2,this)组成的三角形的面积double l1=length(p1,p2);double l2=length(p2,this);double l3=length(p1,this);double p=(l1+l2+l3)/2;return Math.sqrt(p*(p-l1)*(p-l2)*(p-l3));//海伦公式求三角形面积}}

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

代码实现如下:

/* * 思路:以向量方向计算 *把多边形分割成若干个小三角形,进行分别计算并累加,注意要按一个方向累加(逆时针或顺时针) * 每个小三角形的计算公式: (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<n;i++){x[i]=sc.nextInt();y[i]=sc.nextInt();}double area=0;for(int i=0;i<n;i++){int t=i+1;//t为下一个顶点if(t==n){//当i到第n个顶点时,令t也就是下一个顶点为第一个t=0;}area+=(x[i]*y[t]-x[t]*y[i])/2.0;//三角形向量计算公式}area=Math.abs(area);//当面积为负时,使其为正System.out.println(String.format("%.1f",area));}}}

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小班安全教案下雨打雷怎么办 幼儿园小班社会教案下雨打雷怎么办 两个月宝宝吃手怎么办 胳膊上长了个猴子怎么办 刚刚出壳的小鸡怎么办 南宁电动车牌被偷了怎么办 南宁电车车牌被偷了怎么办 电车车牌被偷了怎么办 上海电动车车牌被偷了怎么办 太子摩托车离合回的慢怎么办 指甲小月牙太少怎么办 牛仔裤用84泡了怎么办 蓝色的衣服晒红怎么办 厨房用的剪刀开合很紧怎么办 理发的剪刀钝了怎么办 小孩眼睛肿了怎么办才能消肿 柿子和螃蟹后要怎么办 柿子和螃蟹吃了怎么办 吃了没熟的虾怎么办 邻居小孩怕我家小狗怎么办 心里有一道坎过不去了怎么办 刚买的小狗怕人怎么办 一年级孩子字写不好怎么办 小狗三天没吃了怎么办 捡到一只流浪猫怎么办 仓鼠四肢红肿圈状怎么办 泰迪的鼻子干燥怎么办 小狗眼睛有白色浓稠物怎么办 流浪狗生了小狗怎么办 学生字写得很差怎么办 猫身上粘老鼠胶怎么办 抄东西抄的手疼怎么办 皮质物品被油性笔划了怎么办 在小区猫丢了怎么办 母猫把小猫丢了怎么办 小狗不吃东西没精神怎么办 小狗的鼻子烂了怎么办 狗老是在家拉尿怎么办 狗狗鼻子有点干怎么办 狗的鼻头不黑了怎么办 金毛鼻头不黑怎么办