【SSL.1213】多边形面积(difficult)(计算几何)
多边形面积(difficult)
Description
中学生杰利陶醉于数学研究.他思考的问题对于专家而言可能太多简单,但作为一个15岁的业余爱好者,他做得非常棒.他太热衷思考数学问题,以至于轻易就学会了试用数学方法来解决碰到的问题.一天,他看到桌上的一张纸.他四岁的妹妹玛利在上央画了一些线.那些线恰好构成了一个凹多边形,如下图:
"棒极了",他想,"这些多边形看起来是规则的.我曾经学过怎样计算三角形、矩形和圆形的面积。我一定能找到计算这些图形的方法。"他确实做到了。首先,他标记多边形顶点的坐标。如图二所示。随后,他毫不费力的求得结果0.75。
当然,他不会满足解决这样简单的问题。“嗯,如果纸上面是任意一个多边形,我们应该怎样计算它的面积呢?”他问自己。可他一直都没有找到计算多边形面积的通用方法。他清楚地明白以他的能力无法找到总是的答案。所以他向你请教。他会很感谢你的好心帮助。
Input
第一行是一个整数n,代表图形的顶点数(1<=n<=1000).
接下来的n行,每行一对实数,代表顶点坐标(xi,yi)。每个样例的图形由第一个顶点连接第二个顶点,第二个顶点连接第三个顶点…最后第n个顶点连接第一个顶点形成封闭多边形。
Output
输出图形面积或字符串"Impossible"
如果图形是一个多边形,计算他的面积(精确到小数点后两位)。如果输入的顶点不能构成多边形(也就是说,一条边和另一条边不相连的边相交,例如,四条线段的图形,第一条线段和第三条线段相交),就输出"Impossible"。指出图形不可能是多边形。如果顶点的数量不足以构成一个封闭的多边形,也输出"Impossible"
Hint
GDKOI2002-5
对于求多边形的面积(无论凹凸),同样可能和叉积.设多边形顶点依次为A1,A2,A3,...,AN,则该多边形面积为:
A1A2A1A3+A1A3A1A4+…+A1An-1*AN
输入样例
1
5
0 0
0 1
0.5 0.5
1 1
1 0
2
4
0 0
0 1
1 0
1 1
输出样例
1
0.75
2
Impossible
解题思路
参考【51nod 1264】线段相交(计算几何)和P2785 物理1(phsic1)- 磁通量(计算几何)
AC代码
#include<algorithm>
#include<cstdio>
#include<cmath>
using namespace std;
int n;
double ans,x[1005],y[1005];
struct node
{double x,y;
}a[5];
double cj(node x,node y,node z)
{return (x.x-z.x)*(y.y-z.y)-(x.y-z.y)*(y.x-z.x);
}
bool check(node x,node y,node z)
{if(z.x>=min(x.x,y.x)&&z.x<=max(x.x,y.x)&&z.y>=min(x.y,y.y)&&z.y<=max(x.y,y.y))return 1;return 0;
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%lf%lf",&x[i],&y[i]);if(n<3){printf("Impossible");return 0;}for(int i=1;i<n;i++)for(int j=i+2;j<=n;j++){if(i==1&&j==n)continue;int t=j+1;if(t>n)t=1;a[1]=(node){x[i],y[i]};a[2]=(node){x[i+1],y[i+1]};a[3]=(node){x[j],y[j]};a[4]=(node){x[t],y[t]};int ok=0;if(cj(a[3],a[4],a[1])*cj(a[3],a[4],a[2])<0&&cj(a[1],a[2],a[3])*cj(a[1],a[2],a[4])<0)ok=1;if(!cj(a[1],a[2],a[3])&&check(a[1],a[2],a[3]))ok=1;if(!cj(a[1],a[2],a[4])&&check(a[1],a[2],a[4]))ok=1;if(!cj(a[3],a[4],a[1])&&check(a[3],a[4],a[1]))ok=1;if(!cj(a[3],a[4],a[2])&&check(a[3],a[4],a[2]))ok=1;if(ok){printf("Impossible");return 0;}}for(int i=1;i<n;i++)ans+=(x[i]*y[i+1]-x[i+1]*y[i])/2.0;ans+=(x[n]*y[1]-x[1]*y[n])/2.0;printf("%.2lf",abs(ans));return 0;
}
谢谢
【SSL.1213】多边形面积(difficult)(计算几何)相关推荐
- 多边形面积_ssl1213_计算几何
Description 中学生杰利陶醉于数学研究.他思考的问题对于专家而言可能太多简单,但作为一个15岁的业余爱好者,他做得非常棒.他太热衷思考数学问题,以至于轻易就学会了试用数学方法来解决碰到的问题 ...
- POJ 2826 An Easy Problem?! 叉积求多边形面积 【计算几何】
ACM博客_kuangbin POJ 2826 An Easy Problem?! An Easy Problem?! Time Limit: 1000MS Memory Limit: 65536 ...
- 观星(计算几何/凸包/多边形面积)
观星 对于平面上有n个点分为三类,要求寻找一个三角形,三个顶点分别属于这三类,求解最大面积. N<=3000 首先考虑到O(n2)O(n^2)O(n2)的枚举,然后对于另外一种考虑这个点的位置, ...
- HDU 2036 改革春风吹满地(求多边形面积)
转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2036 改革春风吹满地 ...
- pku 2954 Triangle pku 1265 Area Pick定理的应用 + 叉积求多边形面积
Pick定理证明:http://translate.google.com/translate?u=http://episte.math.ntu.edu.tw/articles/sm/sm_25_10_ ...
- hdu2036(多边形面积)
Description " 改革春风吹满地, 不会AC没关系; 实在不行回老家, 还有一亩三分地. 谢谢!(乐队奏乐)" 话说部分学生心态极好,每天就知道游戏,这次考试如此 ...
- 多边形面积(Area_Of_Polygons)
原理: 任意多边形的面积可由任意一点与多边形上依次两点连线构成的三角形矢量面积求和得出. 分析: 由于给出的点是相对于我们的坐标原点的坐标,每个点实际上我们可以当作一个顶点相对于原点的向量,如下图所 ...
- poj 1654 Area 多边形面积
/* poj 1654 Area 多边形面积题目意思很简单,但是1000000的point开不了 */ #include<stdio.h> #include<math.h> # ...
- 三角剖分求多边形面积的交 HDU3060
1 //三角剖分求多边形面积的交 HDU3060 2 3 #include <iostream> 4 #include <cstdio> 5 #include <cstr ...
最新文章
- 在pcduino上实现图像识别的程序
- android computescroll_Android Scroller与computeScroll方法的调用关系
- 8屏 旌宇多屏管理软件_如何选择拼接屏,不能说的秘密,都在这!
- 非一致性访存系统_Hibernate事实:访存策略的重要性
- C++拷贝构造函数的调用时机
- ensp路由器无法启动_品胜云路由器Breed刷入详细教程,技巧和注意事项,功能大增...
- 新概念系列之《Part 1 Lesson 137 A pleasant dream》
- 双线性变换(Tustin transform/bilinear transformation)
- 大数据之实时流处理常用框架
- iOS版本 不限速迅雷 企业证书打包的 https://www.pgyer.com/yZAv 密码 9800
- 如何借助分布式存储 JuiceFS 加速 AI 模型训练
- python中一切可迭代对象都支持解包 - Iterable Unpacking
- 被深信服上网行为管理器AC拒绝的操作如何正常访问
- 玩聚SD:感谢ECVIP、盗盗、网贝、和菜头的博客推荐
- appt命令检测Apk信息的方法
- 怎么申请购买公司电子邮箱?企业电子邮箱免费注册教程
- python编译安装详解_linux 编译安装python3.6的教程详解
- RZC2512封装尺寸图片 RZC2512典型应用框图图片
- win10任务栏点击没反应
- acme.sh证书申请
热门文章
- 2018 1/28随笔
- 例题6-4 破损的键盘(又名:悲剧文本)(Broken Keyboard,UVa 11988)—静态链表...
- 问题记录2:cloneNode()
- 台词图片怎么拼接?分享三种台词拼接小技巧
- 第五届蓝帽杯初赛:I_will_but_not_quite
- linux系统日志文件的详细介绍
- MaixBit初次上手配置教程
- 哪些蓝牙耳机防水性强?防水蓝牙耳机推荐
- fuzz测试libmodbus | AFL篇
- 计算机连接游戏手柄,usb游戏手柄怎么用 usb游戏手柄连接电脑方法【教程】