博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ZOJ 1081 Points Within( 判断点在多边形内外 )
阅读量:6900 次
发布时间:2019-06-27

本文共 1633 字,大约阅读时间需要 5 分钟。


链接:

题意:给出n个点围成的一个多边形,现在有m个点p,询问p是否在多边形内,你可以认为这些点均不同且输入的顶点是多边形中相邻的两个顶点,最后的顶点与第一个相邻并且每一个顶点都连接两条边( 左右 ),所以这个图形是个简单的多边形。

思路:经典判断点是否在多边形内的题


/*************************************************************************    > File Name: zoj1081.cpp    > Author:    WArobot     > Blog:      http://www.cnblogs.com/WArobot/     > Created Time: 2017年05月01日 星期一 14时47分03秒 ************************************************************************/#include
#include
#include
#include
using namespace std;#define eps 1.0e-5#define dou doublestruct point{ dou x; dou y;}po[111];int n,m;bool online(point p1,point p,point p2){ if( p.x<=max(p1.x,p2.x) && p.x>=min(p1.x,p2.x) && p.y<=max(p1.y,p2.y) && p.y>=min(p1.y,p2.y) ){ if ( fabs(((p.x-p1.x)*(p2.y-p1.y) - (p.y-p1.y)*(p2.x-p1.x)))<=eps ) return true; } return false;}bool inside(point p){ int cnt = 0; dou xinter; point p1,p2; p1 = po[0]; for(int i=1;i<=n;i++){ p2 = po[i%n]; if( online(p1,p,p2) ) return true; if( p.x<=max(p1.x,p2.x) && p.y<=max(p1.y,p2.y) && p.y>min(p1.y,p2.y) ){ if(p1.y!=p2.y){ xinter = (p.y-p1.y)*(p1.x-p2.x)/(p1.y-p2.y) + p1.x; // 理论上的最远距离 if(p1.x==p2.x || p.x<=xinter) cnt++; } } p1 = p2; } if(cnt%2==0) return false; else return true;}int main(){ int kase = 0; point p; while(~scanf("%d",&n) && n){ scanf("%d",&m); if(kase) printf("\n"); for(int i=0;i

转载于:https://www.cnblogs.com/WArobot/p/6791978.html

你可能感兴趣的文章
java学习思维导图
查看>>
数组取别名
查看>>
SQL--Advanced tutorials
查看>>
SaltStack源码分析之file状态模块
查看>>
Jetty锁定文件的问题
查看>>
[转] 中国人不可不知道的知识
查看>>
MongoDB分布式文件存储数据库视频教程Ⅰ
查看>>
开机自启pm2
查看>>
NT环境下进程隐藏的实现
查看>>
SQL中 inner join、 left join 、right join、 outer join之间的区别
查看>>
微软TMG 2010工作组环境独立服务器阵列配置-1
查看>>
1080P、720P、4CIF、CIF所需要的理论带宽【转】
查看>>
Excel批量取消超链接
查看>>
Word中的拼页、书籍折页、反向书籍折页(二)
查看>>
百万数据修改索引或主键的问题
查看>>
cmd 创建并写入文件
查看>>
C盘无损扩容
查看>>
我的友情链接
查看>>
敏捷开发智慧敏捷系列之三:做不做架构设计?
查看>>
8139cp device eth0 does not seem to be present
查看>>