传送门

题解:

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

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. 详解centos7配置本地yum源的方法

    近在使用虚拟机时遇到一些麻烦,因为公司内部有网络管理,所以vm连接不上外网,yum无法安装软件,怎么解决呢?–使用iso做本地yum源,可以解决大部份的包安装. vm安装的是centos7. 1.挂载 ...

  2. 置换群 Burnside引理 Pólya定理(Polya)

    置换群 设\(N\)表示组合方案集合.如用两种颜色染四个格子,则\(N=\{\{0,0,0,0\},\{0,0,0,1\},\{0,0,1,0\},...,\{1,1,1,1\}\}\),\(|N|= ...

  3. Individual P1: Summary

    经过5个小时成功把simple mode写差不多了..orz 也是蛮拼的. 开始毫无头绪,本能地开始从度娘搜索‘c# 单词统计’= =看了两段代码也算是见过c#的人了.差不多花了我1小时的时间. 然后 ...

  4. Github学习心得体会

    https://github.com/Accredit/TEST 在本学期第一次接触Github,在系统的学习了Github的使用之后,自己对Github有了一个基本的使用了解.在这个过程中,自己也认 ...

  5. 《软件工程》小组团队项目-小学生四则运算APP(First Sprint)

    <软件工程>团队项目我们小组选择了小学生四则运算APP,在上学期原有的项目基础上进行更新升级.(自我感觉我们团队上学期的小学生四则运算APP是较为成功且实用的,不过这学期学习到了新的知识, ...

  6. C++中struct 和 class的区别

    首先,C++中类的定义,从狭义上理解,就是我们使用的class类型.从广义上,类就是定义了一个新的类型和新的作用域,它具有成员函数和成员数据. 而对广义类定义的实现分为两种,一种是使用struct实现 ...

  7. The Contest CodeForces - 813A (思维)

    Pasha is participating in a contest on one well-known website. This time he wants to win the contest ...

  8. Quartz.NET 入门,带C#实例

    概述 Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等. Quartz.NET允许开发人员根据时间间隔(或天)来调度作业.它实现了 ...

  9. Maven+SSM整合.doc

    Maven + SSM整合 1开发环境搭建 1.1Eclipse4.7(Oxygen) + Tomcat8 + Maven3.5.2 2Maven Web项目创建 2.1新建maven项目 2.2 选 ...

  10. Java的Spring内实现的mini版内存"计数器"功能

    工期紧急,不让用Redis,自己实现了一个Spring内的mini版内存"计数器"功能,很简陋,和业务耦合太紧密,需要改进. public Long getCreationCoun ...