链接:传送门

思路:判断每支箭是否在多边形内,计算几何点定位中水题,不清楚下面的代码能不能适用于给定点的顺序不确定( 既不是顺时针又不是逆时针 )


/*************************************************************************
> File Name: hdu1756.cpp
> Author: WArobot
> Blog: http://www.cnblogs.com/WArobot/
> Created Time: 2017年04月30日 星期日 22时58分41秒
************************************************************************/ #include<bits/stdc++.h>
using namespace std; #define dou double
#define eps 1.0e-5 struct point{
dou x;
dou y;
}po[110];
int n,m; // 判断是否在线上
bool online(point p1,point p2,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 inside(point p){
int cnt = 0;
dou xinters;
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.y>min(p1.y,p2.y) && p.y<=max(p1.y,p2.y) && p.x<=max(p1.x,p2.x) && 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 ) cnt++;
}
p1 = p2;
}
if(cnt%2==0) return false;
return true;
} int main(){
point tmp;
while(~scanf("%d",&n)){
for(int i=0;i<n;i++) scanf("%lf%lf",&po[i].x,&po[i].y);
scanf("%d",&m);
for(int i=0;i<m;i++){
scanf("%lf%lf",&tmp.x,&tmp.y);
if( inside(tmp) ) printf("Yes\n");
else printf("No\n");
}
}
return 0;
}

HDU 1756 Cupid's Arrow( 判断点在多边形的内外 )的更多相关文章

  1. HDU 1756 Cupid's Arrow 判断点在多边形的内部

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

  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. HDU 1756 Cupid's Arrow 计算几何 判断一个点是否在多边形内

    LINK:Cupid's Arrow 前置函数 atan2 返回一个向量的幅角.范围为[Pi,-Pi) 值得注意的是 返回的是 相对于x轴正半轴的辐角. 而判断一个点是否在一个多边形内 通常有三种方法 ...

  4. HDU 1756 Cupid's Arrow (几何问题,判定点在多边形内部)

    题意:中文的么,自己看喽. 析:很容易明白是判定点是不是在多边形内部,一般是向量来判定,我一开始用点在向量的右侧,因为是顺时针给的,只要点全在外侧或边上, 就可以,暴力一下就ok.由于这个是浮点数,一 ...

  5. 【HDOJ】1756 Cupid's Arrow

    图论,点在多边形内部的判定. /* 1756 */ #include <iostream> #include <string> #include <map> #in ...

  6. hdu 1756(判断点是否在多边形中)

    传送门 题解: 射线法判定点是否在多边形内部: AC代码: #include<iostream> #include<cstdio> #include<cmath> ...

  7. Cupid's Arrow[HDU1756]

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

  8. matlab练习程序(射线法判断点与多边形关系)

    依然是计算几何. 射线法判断点与多边形关系原理如下: 从待判断点引出一条射线,射线与多边形相交,如果交点为偶数,则点不在多边形内,如果交点为奇数,则点在多边形内. 原理虽是这样,有些细节还是要注意一下 ...

  9. zoj 1081 判断点在多边形内

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=81Points Within Time Limit: 2 Second ...

随机推荐

  1. 51nod-独木舟问题

    n个人,已知每个人体重,独木舟承重固定,每只独木舟最多坐两个人,可以坐一个人或者两个人.显然要求总重量不超过独木舟承重,假设每个人体重也不超过独木舟承重,问最少需要几只独木舟?分析:  一个显然的策略 ...

  2. MYSQL数据库常用的LINUX命令

    此为我工作中常用MYSQL数据库命令 LINUX系统中启动 / 重启MYSQL服务:service mysql start  /  service mysql restart(重启服务) LINUX系 ...

  3. Win32 编程消息常量(C#)

    public class WinMessages { #region 基本消息 public const int WM_NULL = 0x0000; public const int WM_CREAT ...

  4. Centos6下创建Centos6基础镜像

    在centos6下可以使用官方仓库拉取一个指定系统类型跟tag的镜像到本地 [root@localhost ~]# docker pull centos:6.8 6.8: Pulling from c ...

  5. acgis地图初始化并根据经纬度进行标注

    根据项目要求,需要对指定的位置进行标注. 1.初始化地图服务 2.根据地图服务接口信息进行标注 3.根据经纬度信息进行标注 展示接口截图: 以下代码并不能直接粘贴跑起来,因为代码所涉及的文件地址都是内 ...

  6. jedis 连接 redis

    一.连接单机版的 redis /** * 直接连接 redis * @throws Exception */ @Test public void test1() throws Exception { ...

  7. 计算机-禁止USB服务

    接到一个任务,禁止集团内所有电脑的USB接口进行文件拷贝,但不能妨碍打印机.鼠标键盘.扫描仪.加密狗等等一切需要USB接口工作的外部设备. 纠结了,这不摆明了让我蛋疼吗? 不过,疼归疼,办法总是要想滴 ...

  8. tomcat设置编码utf8

    1.       Java类: CharacterEncodingFilter  import javax.servlet.*; import java.io.IOException; public ...

  9. NEFU 118

    其实一道公式题: n!中素数i的幂为: [n/i]+[n/i^2]+[n/i^3]+[n/i^4]+...... #include <iostream> #include <cstd ...

  10. 串口通讯 ADC0804 数码管

    #include<reg52.h> #include<stdio.h> #include<intrins.h> #define uchar unsigned cha ...