ZOJ 1081 Points Within
来源:互联网 发布:西门子工业软件怎么样 编辑:程序博客网 时间:2024/06/02 02:55
分析:按顺序给你n边形的n个坐标,和一些点的坐标,让你判断这些点是不是在多边形内。用改进弧长法来求解比较好,原理可参看网上的,下面附我写的代码。
# include <stdio.h> typedef struct point { int x,y; }Point; Point v[105]; int main() { int i,n,m,cur,nex,ans,f,t=1; Point p; while(scanf("%d",&n),n) { scanf("%d",&m); for(i=1;i<=n;i++) scanf("%d%d",&v[i].x,&v[i].y); if(t!=1) putchar('\n'); printf("Problem %d:\n",t++); while(m--) { scanf("%d%d",&p.x,&p.y); for(i=1;i<=n;i++) v[i].x-=p.x,v[i].y-=p.y; nex=v[1].x>=0?(v[1].y>=0?1:4):(v[1].y>=0?2:3); for(i=1,ans=0;i<=n;i++) { f=v[i].x*v[i%n+1].y-v[i%n+1].x*v[i].y; if((!v[i].x&&!v[i].y)||(!f&&v[i].x*v[i%n+1].x<=0&&v[i].y*v[i%n+1].y<=0)) break; cur=nex; nex=v[i%n+1].x>=0?(v[i%n+1].y>=0?1:4):(v[i%n+1].y>=0?2:3); if(cur%4+1==nex) ans+=1; else if(cur%4+2==nex||cur%4-2==nex) ans+=(f>0?2:-2); else if(nex%4+1==cur) ans-=1; } if(i<=n||ans) printf("Within\n"); else printf("Outside\n"); for(i=1;i<=n;i++) v[i].x+=p.x,v[i].y+=p.y; } } return 0; }
0 0
- zoj 1081 Points Within
- ZOJ 1081 Points Within
- zoj 1081 Points Within
- ZOJ 1081 Points Within (几何)
- ZOJ 1081 Points Within(点在多边形内判定)
- zoj 1081 Points Within[判断点在简单多边形内]
- ZOJ 1081 Points Within 判断点是否在多边形内
- ZOJ 1081 Points Within(点在多边形内判定)
- zoj 1081 Points Within (判断点是否在多边形内)
- zoj 1081 Points Within 判断点是否在任意多边形内(模板)
- zoj 1081 Points Within (判断点是否在多边形内)
- Points Within
- Points Within
- zoj1081 Points Within
- ZOJ1081 Points Within
- ZOJ1081 Points Within
- [学习][ZOJ1081]点、直线关系 Points Within
- zoj 2554 Brownie Points
- 对你的再次认识——机房的整体分析
- 【AchorU3d学习笔记①】如何高效的学习Unity3D
- 8月13日GDOI模拟总结
- Mybatis/Ibatis,数据库操作的返回值
- 继承
- ZOJ 1081 Points Within
- HDU 5099 Comparison of Android versions【字符串+模拟】
- Android-应用开发-广播和服务(八)
- WPf中多线程改UI
- 图片滚动 LTView
- http://zzgthk.iteye.com/blog/1064434
- Snail—iOS网络学习之得到网络上的数据
- pdo设置和读取数据库连接属性
- J114 8/13