【计算几何】 叉乘求多边形面积<凹凸均可>
来源:互联网 发布:什么是aso优化 编辑:程序博客网 时间:2024/04/30 08:48
Doctor 要粉刷tardis
Doctor 在最近一次时空旅行中陷入旋涡,出来的时候发现tardis的外墙上有一个简单多边形(没有缺口),它的边要么是垂直的,要么是水平的。他对这个多边形的出现非常不满,所以他要把它用蓝色颜料盖上,现在他需要知道这个多边形的面积。
多边形被放置在一个X-Y的卡笛尔平面上,它所有的边都平行于两条坐标轴之一。然后按逆时针方向给出各定点的坐标值。所有的坐标值都是整数(因此多边形的面积也为整数)。
INPUT
第一行输入测试用例个数C(1<=C<=50)。各测试用例第一行给出多边形的顶点数n(n<=100)。接下来的几行每行给出多边形一个顶点的坐标值X和Y(都为整数并且用空格隔开)。顶点按逆时针方向逐个给出。并且多边形的每一个顶点的坐标值-200<=x,y<=200。多边形最后是靠从最后一个顶点到第一个顶点画一条边来封闭的。
OUTPUT
input output
1 9
10
0 0
4 0
4 1
3 1
3 3
2 3
2 2
1 2
1 3
0 3
题意:题意已经很明确,就是求解一个规则的多边形的面积。
思路:求多边形的面积可以使用叉乘求面积。设多边形有n个顶点,用数组将其存起来,其余各点均与第一个点连起来,这样从逆时针方向来看,每两个点构成一个三角形,在使用叉乘来求的面积。有一点要明确的是,每一次使用叉乘求面积,不能加绝对值,因为每一步叉乘求面积求得的是有向面积,将所有的有向面积加和所求的就是该多边形的面积,这种方法不仅适用于凸多边形,同时也适用于凹多边形。
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;int main(){ int c; cin>>c; while(c--) { double cx,area=0; long long a[105],b[105],x1,x2,y1,y2; int n; cin>>n; for(int i=0;i<n;i++) cin>>a[i]>>b[i]; int i=1; while(i<n-1) { x1=a[i]-a[0],y1=b[i]-b[0]; x2=a[i+1]-a[0],y2=b[i+1]-b[0]; i++; cx=x1*y2-x2*y1; //cout<<cx/2<<" "; area=area+cx/2; } cout<<area<<endl; } return 0;}
- 【计算几何】 叉乘求多边形面积<凹凸均可>
- 叉乘求任意多边形(凹凸皆可)面积 (属于计算几何类型)
- [计算几何] 计算多边形面积
- 判断多边形凹凸(计算几何基础)
- 判断多边形凹凸(计算几何)
- 计算几何【2】 判断凹凸多边形
- 多边形面积_ssl1213_计算几何
- 多边形面积 ssl1213 计算几何
- 计算几何--多边形面积的计算
- 计算几何-计算多边形面积(模板)
- hdu2036 计算坐标内任意多边形的面积 含凹凸
- HDU2108 Shape of HDU - 计算几何 判断凹凸多边形
- 求多边形面积(计算几何)
- eoj1127 计算几何 任意多边形面积
- Gym 100625H 多边形面积-计算几何
- 计算几何_判断多边形是否存在,及面积大小
- 计算几何_圆与多边形面积交
- 【计算几何】多边形面积 pascal 解…
- git多账号登录问题
- 有趣的C语言--函数声明和形参问题
- CSS3备忘
- 类加载机制
- Android抽象布局——include、merge 、ViewStub
- 【计算几何】 叉乘求多边形面积<凹凸均可>
- uboot命令详解
- 【miscellaneous】北斗短报文
- 7月份英语学习总结
- 2016多校联赛4L (hdu5775) Bubble Sort
- 优化策略(并发、数据量大的问题)
- NOI2016 滚粗记
- JavaScript进阶篇笔记(一)
- 怎样将word中拼写错误的下划线去掉——有方法