1805【计算几何】多边形面积.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1805【计算几何】多边形面积

计算几何】多边形面积 Time Limit:1000MS? Memory Limit:65536K Total Submit:54 Accepted:25 Description 多边形面积(area.pas/c/cpp) 【问题描述】 中学生杰利陶醉于数学研究,他思考的问题对专家而言可能太过简单,但作为一个15岁的中学生来说,他做得非常棒。他太热衷于思考数学问题,以至于轻易就会尝试用数学方法来解决碰到的问题。一天,他看到桌上的一张纸。他四岁的妹妹玛丽在上面画了一些线。那些线恰好构成一个凹多边形,如图1所示。 “棒极了!”他想,“这些多边形看起来是规则的。我曾经学过怎样计算三解形、矩形和圆的面积。我一定能找到计算这些图形面积的方法。”他确实做到了。首先,他标记多边形顶点的坐标,如图2所示。随后,他豪不费力的求得结果----0.75 。 当然,他不会满足于解决这么简单的问题。“嗯,如果纸上面的是一个任意的多边形,我应该怎么计算它的面积呢?”他问自己。可他一直都没有找到计算任意多边形面积的通用方法。他清楚地明白以他的能力无法找到问题的答案。所以他向你请教。他会很感激你好心的帮助。 Input 输入数据的第一行是一个整数n,代表图形的顶点个数 1 N 1000 。 接下来的N行,每行是一对实数,代表图形的顶点的坐标 xi,yi 。每个图形由第一个顶点连接第二个顶点,第二个顶点连接第三个顶点,…,最后第N个顶点连接第一个顶点形成封闭的多边形。 Output 输出图形的面积或字符串“Impossible”。 如果图形是一个多边形,计算它的面积 精确到小数后两位 。如果输入的顶点不能构成一个多边形 也就是说,一条边和另一条不相连的边相交,例如,四条线段的图形,第一条线和第三条线段相交 ,就输出“Impossible”,指出图形不可能是多边形。如果顶点的数量不足以构成一个封闭的多边形,也输出“Impossible”。 Sample Input 样例一 5 0 0 0 1 0.5 0.5 1 1 1 0 样例二 4 0 0 0 1 1 0 1 1 Sample Output 样例一 0.75 样例二 Impossible Source var i,j,n:longint; s,x1,x2,y1,y2:real; x,y:array[1..1000] of real; function f x1,x2,x3,x4,y1,y2,y3,y4:real :boolean; begin if x3-x1 * y2-y1 - y3-y1 * x2-x1 * x4-x1 * y2-y1 - y4-y1 * x2-x1 0 and x1-x3 * y4-y3 - y1-y3 * x4-x3 * x2-x3 * y4-y3 - y2-y3 * x4-x3 0 then exit true else exit false ; end; begin readln n ; for i: 1 to n do readln x[i],y[i] ; if n 3 then begin writeln Impossible ; halt; end; for i: 1 to n-2 do for j: i+2 to n do if f x[i],x[i+1],x[j],x[j mod n+1],y[i],y[i+1],y[j],y[j mod n+1] then begin writeln Impossible ; halt; end; for i: 2 to n-1 do begin x1: x[i]-x[1]; y1: y[i]-y[1]; x2: x[i+1]-x[1]; y2: y[i+1]-y[1]; s: s+x1*y2-x2*y1; end; s: abs s/2 ; if s 0.001 then writeln Impossible else writeln s:0:2 ; end.

文档评论(0)

tiangou + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档