网站大量收购独家精品文档,联系QQ:2885784924

资料南开2008暑假集训hdu.pptxVIP

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
HDU 2108:Shape of HDUxiangzi of NanKai University先回顾一下这道题~~~我们用依次按逆时针方向输入顶点坐标来表示一个多边形,现在请你编程判断这个图形是凸多边形还是凹多边形?输入:包含多组测试数据,首先是一行整数表示多边形点的数量,然后逆时针顺序依次输入点的横、纵坐标。输出:若为凸多边形输出convex,否则输出concave来对题目分析一下~~~p0p7p1p6向量叉积:α×β = x1×y2 – x2×y1可以从而得知如果是凸多边形必然对任意n和i, pn-1pn×pn-1pn+i=0,如果是凹多边形,必然会出现0乘积。(右手定则判断差积方向~~)p2p5p3p4p0p5p1p2p4p3想想解题思路~~~p0p7p1p6思路一:对任意一条边pn-1pn使之与除这条边以外的pn-1pi相乘,如果发现乘积异号,说明是凹多边形,否则是凸多边形。思路二:对点集(p0,p1,p2......pn-1,pn)判断点pn-3 和pn是否在pn-1pn-2连线的两边。如果对所有点pn都满足pn-3 和pn在pn-1pn-2同侧,则为凸多边形。 使用差乘判断两点否在一边。(相较以第一种方法可以减少运算)p2p5p3p4p0p5p1p2p4p3思路一的代码实现#includestdio.hint main(){ int x[1000],y[1000],n,x1,y1,t; while(scanf(%d,n) n){ int i=0,j; bool isconvex=true; for(i=0;in;i++){ scanf(%d%d,x[i],y[i]); } for(i=0;in isconvex;i++){ if(i==n-1){ x1=x[0]-x[i]; y1=y[0]-y[i]; } else { x1=x[i+1]-x[i]; y1=y[i+1]-y[i]; } for(j=0;jn-1;j++){ t=(x[j]-x[i])*y1-(y[j]-y[i])*x1; if(t0){isconvex=false;break;} } } if(isconvex)printf(convex\n); else printf(concave\n);} return 0;}思路二的代码实现: (可以对代码优化以减少篇幅,此处为了易读没有做简化)#includestdio.hint main(){int n,i,j,x1,y1,x2,y2,x3,y3;int px[100],py[100];while(scanf(%d,n) n){ bool isconvex=true; for(i=0;in;i++){scanf(%d%d,px[i],py[i]); if(i2 isconvex) { x1=px[i-3]-px[i-2]; y1=py[i-3]-py[i-2];x2=px[i-1]-px[i-2]; y2=py[i-1]-py[i-2];x3=px[i]-px[i-2]; y3=py[i]-py[i-2];if((x1*y2-x2*y1)0 ||(x3*y2x2*y3)0)isconvex=false; } if(i==n-1){x1=px[i-1]-px[i]; y1=py[i-1]-py[i];x2=px[0]-px[i]; y2=py[0]-py[i];x3=px[1]-px[0]; y3=py[1]-py[0];if((x1*y2-x2*y1)0 ||(x3*y2-x2*y3)0)isconvex=false;} } if(isconvex)printf(convex\n); else printf(concave\n); } return 0;}谢谢观赏~~~~南开大学软件学院 07届 祥子

文档评论(0)

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

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

1亿VIP精品文档

相关文档