传送门

题解:

  射线法判定点是否在多边形内部;

AC代码:

  

 #include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const double esp=1e-;
const int maxn=+; int n,m;
struct Point
{
double x,y;
}p[maxn]; double K(Point p1,Point p2)
{
return (p2.y-p1.y)/(p2.x-p1.x);
}
bool onEdge(Point q,Point p1,Point p2)
{
if(p1.x == p2.x)//斜率不存在的情况,HDU的数据里没有卡这种情况
return q.y >= min(p1.y,p2.y) && q.y <= max(p1.y,p2.y) && q.x == p1.x ? true:false; if(q.x >= min(p1.x,p2.x) && q.x <= max(p1.x,p2.x) && q.y >= min(p1.y,p2.y) && q.y <= max(p1.y,p2.y))
return fabs(K(p1,q)-K(p1,p2)) < esp ? true:false;
return false;
}
bool inPolygon(Point q)
{
int ans=;
Point p1,p2;
p1=p[];
for(int i=;i <= n;++i)
{
p2=p[i%n];
if(onEdge(q,p1,p2))
return true;
if(p1.y == p2.y)//判断p1p2是否为水平边,水平边不作考虑
{
p1=p2;//起初,这儿我并没有加这句话,改了好半天才看到
continue;
}
/**
注意:此处q.y是严格>min();
此处是用来处理射线与顶点相交的情况的
当相交的顶点为凸顶点时,两条边都加上;
当相交的顶点是凹顶点时,只加右边那条边;
*/
if(q.y > min(p1.y,p2.y) && q.y <= max(p1.y,p2.y) && q.x <= max(p1.x,p2.x))
{
//当p1p2为竖线时,由条件q.x <= max(p1.x,p2.x)可得由p向右发出的射线与p1p2有交点
if(p1.x == p2.x)
ans++;
else
{
//x : 经过q点且平行于x轴的直线与p1p2交点的横坐标
double x=p1.x+(q.y-p1.y)/K(p1,p2);
if(q.x <= x)//如果q.x <= x,说明q向右发出的射线与p1p2有交点
ans++;
}
}
p1=p2;
}
return ans&;
}
int main()
{
// freopen("C:\\Users\\hyacinthLJP\\Desktop\\in&&out\\HDU\\1756.in","r",stdin);
while(~scanf("%d",&n))
{
for(int i=;i < n;++i)
scanf("%lf%lf",&p[i].x,&p[i].y); scanf("%d",&m);
for(int i=;i <= m;++i)
{
Point q;
scanf("%lf%lf",&q.x,&q.y);
if(inPolygon(q))
printf("Yes\n");
else
printf("No\n");
}
}
return ;
}

hdu 1756(判断点是否在多边形中)的更多相关文章

  1. hdu 1756 判断点在多边形内 *

    模板题 #include<cstdio> #include<iostream> #include<algorithm> #include<cstring> ...

  2. hdu 1756:Cupid's Arrow(计算几何,判断点在多边形内)

    Cupid's Arrow Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  3. PHP 判断点是否在多边形内

    如何判断一个点是否在一个多边形内,何时会用到这个场景. 我们就模拟一个真是场景.我们公司是快递公司,在本地区域有6个分点.每个分点有3-5个工人负责附近的快递派遣发送,所以根据每个点的服务区域我们就能 ...

  4. java/c# 判断点是否在多边形区域内

    java/c# 判断点是否在多边形区域内 年06月29日 ⁄ 综合 ⁄ 共 1547字 ⁄ 字号 小 中 大 ⁄ 评论关闭 最近帮别人解决了一个问题,如何判断一个坐标点,是否在多边形区域内(二维). ...

  5. hrbustoj 1306:再遇攻击(计算几何,判断点是否在多边形内,水题)

    再遇攻击 Time Limit: 1000 MS    Memory Limit: 65536 K Total Submit: 253(37 users)   Total Accepted: 56(2 ...

  6. JS判断网页是否在微信中打开/

    JS判断网页是否在微信中打开,代码如下: <script type="text/javascript"> function is_weixn(){ var ua = n ...

  7. 百度地图 判断marker是否在多边形内

    昨天画了圆形,判marker是否存在圆形内.今天来画多边形,判断marker在多边形内. 需要引入一个js      <script type="text/javascript&quo ...

  8. hrbustoj 1429:凸多边形(计算几何,判断点是否在多边形内,二分法)

    凸多边形 Time Limit: 2000 MS    Memory Limit: 65536 K Total Submit: 130(24 users)   Total Accepted: 40(1 ...

  9. C# 判断点是否在多边形内

    /// <summary>/// 判断点是否在多边形内/// </summary>/// <param name="pnt">点</par ...

随机推荐

  1. Jenkins部署Python项目实战

    一.背景 我们工作中常用Jenkins部署Java代码,因其灵活的插件特性,例如jdk,maven,ant等使得java项目编译后上线部署一气呵成,同样对于脚本语言类型如Python上线部署,利用Je ...

  2. ecna2017-Sheba’s Amoebas

    很简单的深搜的一道题,由于这道题要找环的个数,并且认为相连当一个点的8个方向种中有一个方向和这个点相连. 这个题做法无非就是暴力每个点,然后满足条件的深搜即可. 感觉我自己的代码写的很无趣,大佬的代码 ...

  3. Redis持久化的两种方式和区别

    该文转载自:http://www.cnblogs.com/swyi/p/6093763.html Redis持久化的两种方式和区别 Redis是一种高级key-value数据库.它跟memcached ...

  4. 5-Python3从入门到实战—基础之数据类型(列表-List)

    Python从入门到实战系列--目录 列表定义 list:列表(list)是Python内置的一种数据类型,list是一种有序的集合,索引从0开始,可以进行截取.组合等: //创建列表 list1 = ...

  5. 软件工程(GZSD2015) 第三次作业提交进度

    第三次作业题目请查看这里:软件工程(GZSD2015)第三次作业 开始进入第三次作业提交进度记录中,童鞋们,虚位以待哈... 2015年4月19号 徐镇.尚清丽,C语言 2015年4月21号 毛涛.徐 ...

  6. 8 commands to check cpu information on Linux

    https://www.binarytides.com/linux-cpu-information/

  7. An internal error has occurred. Java heap space

    http://stackoverflow.com/questions/11001252/running-out-of-heap-space issue: I am having a heap spac ...

  8. APS.NET MVC4生成解析二维码简单Demo

    一.视图 @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewpor ...

  9. [转帖]台积电近10万片晶圆报废,但7nm工艺将成2019营收主力

    台积电近10万片晶圆报废,但7nm工艺将成2019营收主力 2019年02月18日 13:19 1784 次阅读 稿源:Expreview超能网 0 条评论 https://www.cnbeta.co ...

  10. pandas创建一个日期

    1.通过指定周期和频率,使用date.range()函数就可以创建日期序列. 默认情况下,范围的频率是天. 2.bdate_range()用来表示商业日期范围,不同于date_range(),它不包括 ...