判断点P是否在多边形里面
来源:互联网 发布:金方圆数控冲床编程 编辑:程序博客网 时间:2024/05/21 11:27
//a[N]存放的多边行的点,insidepolygon(Int p)点在多边形内;
//边上的点也算在多边形里面
//边的存放可以逆时针或者顺时针
//边上的点也算在多边形里面
//边的存放可以逆时针或者顺时针
时间复杂度O(n)
//a[N]存放的多边行的点,insidepolygon(Int p)点在多边形内;//边上的点也算在多边形里面#define N 1000#define eps 1e-5inline double max(double a,double b) { return a>b?a:b;}inline double min(double a,double b) { return a>b?b:a;}struct point { double x,y;};point a[N];int n,m;bool online(const point &p1,const point &p2,const point &p3) { if(p2.x>=min(p1.x,p3.x)&&p2.x<=max(p1.x,p3.x) &&p2.y>=min(p1.y,p3.y)&&p2.y<=max(p1.y,p3.y)) { if(fabs((p2.x-p1.x)*(p3.y-p1.y)-(p3.x-p1.x)*(p2.y-p1.y))<eps) return true; } return false;} bool insidepolygon(point p) { int counter=0; double xinters; point p1,p2; p1=a[0]; for(int i=1; i<=n; i++) { p2=a[i%n]; if(online(p1,p,p2)) return true; if(p.y>min(p1.y,p2.y)) { if(p.y<=max(p1.y,p2.y)) { if(p.x<=max(p1.x,p2.x)) { if(p1.y!=p2.y) { xinters=(p.y-p1.y)*(p2.x-p1.x)/(p2.y-p1.y)+p1.x; if(p1.x==p2.x||p.x<=xinters) counter++; } } } } p1=p2; } if(counter%2==0) return false; return true;}
0 0
- 判断点P是否在多边形里面
- 判断点是否在多边形区域里面
- 触摸点是否在多边形里面算法
- 判断点是否在多边形里面:CodeForces - 659D Bicycle Race
- 判断一个点是否在多边形内部
- 判断点是否在多边形内
- 判断点是否在多边形中
- 判断点是否在多边形内
- 判断一个点是否在多边形内
- 判断点是否在多边形内
- 判断点是否在多边形内
- 判断点是否在多边形内
- 判断点是否在多边形中
- 判断某个点是否在多边形内
- 判断一个点是否在多边形区域内
- zoj1081判断点是否在多边形内
- 判断点是否在多边形内
- 判断点是否在多边形内
- 478 月老的烦恼(1)
- 484 The Famous Clock
- Android中将应用装到/system/app中
- MTK6592平台 touchpanel驱动设备加载(一)
- NSHTTPCookieStorage
- 判断点P是否在多边形里面
- 596 谁是最好的Coder
- 虚拟机中的linux访问宿主机中的MySQL数据库
- pat 1080. Graduate Admission (30) 浙大复试上机第四题
- 优秀编程人员的十个习惯
- Unity for mac 4.3.1 最新破解版 3D视频游戏 三维动画开发 支持10.9
- 599 奋斗的小蜗牛
- 设计模式——工厂方法模式
- 判断是否为闰年,并且计算生日是第几天