HDU 1756 Cupid's Arrow( 判断点在多边形的内外 )
链接:传送门
思路:判断每支箭是否在多边形内,计算几何点定位中水题,不清楚下面的代码能不能适用于给定点的顺序不确定( 既不是顺时针又不是逆时针 )
/*************************************************************************
> 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( 判断点在多边形的内外 )的更多相关文章
- HDU 1756 Cupid's Arrow 判断点在多边形的内部
Cupid's Arrow Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- hdu 1756:Cupid's Arrow(计算几何,判断点在多边形内)
Cupid's Arrow Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- HDU 1756 Cupid's Arrow 计算几何 判断一个点是否在多边形内
LINK:Cupid's Arrow 前置函数 atan2 返回一个向量的幅角.范围为[Pi,-Pi) 值得注意的是 返回的是 相对于x轴正半轴的辐角. 而判断一个点是否在一个多边形内 通常有三种方法 ...
- HDU 1756 Cupid's Arrow (几何问题,判定点在多边形内部)
题意:中文的么,自己看喽. 析:很容易明白是判定点是不是在多边形内部,一般是向量来判定,我一开始用点在向量的右侧,因为是顺时针给的,只要点全在外侧或边上, 就可以,暴力一下就ok.由于这个是浮点数,一 ...
- 【HDOJ】1756 Cupid's Arrow
图论,点在多边形内部的判定. /* 1756 */ #include <iostream> #include <string> #include <map> #in ...
- hdu 1756(判断点是否在多边形中)
传送门 题解: 射线法判定点是否在多边形内部: AC代码: #include<iostream> #include<cstdio> #include<cmath> ...
- Cupid's Arrow[HDU1756]
Cupid's Arrow Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- matlab练习程序(射线法判断点与多边形关系)
依然是计算几何. 射线法判断点与多边形关系原理如下: 从待判断点引出一条射线,射线与多边形相交,如果交点为偶数,则点不在多边形内,如果交点为奇数,则点在多边形内. 原理虽是这样,有些细节还是要注意一下 ...
- zoj 1081 判断点在多边形内
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=81Points Within Time Limit: 2 Second ...
随机推荐
- javascript的带操作符的赋值运算
看犀牛书发现的问题 下面两个表达式 表达式一 data[i++] *= 2; 表达式二 data[i++] = data[i++] * 2; var data = [7,8,9]; var i = ...
- nyoj14-会场安排问题
会场安排问题 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办.小刘的工作就 ...
- 【ACM-ICPC 2018 南京赛区网络预赛 A】An Olympian Math Problem
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 估计试几个就会发现答案总是n-1吧. 队友给的证明 [代码] #include <bits/stdc++.h> #def ...
- applicationContext-solr.xml
一.动态切换单机和集群 spring-solr 的配置 <!-- 单机版 solrj --> <bean id = "httpSolrServer" class= ...
- hibernate框架总结
实体类编写规则1 实体类里面属性私有的 2 私有属性使用公开的set和get方法操作 3 要求实体类有属性作为唯一值(一般使用id值) 4 实体类属性建议不使用基本数据类型,使用基本数据类型对应的包装 ...
- C/C++ 图像二进制存储与读取
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50782792 在深度学习时,制作样本数 ...
- POJ2389 Bull Math
/* POJ2389 Bull Math http://poj.org/problem?id=2389 高精度乘法 * */ #include <cstring> #include < ...
- [SharePoint2010开发入门经典]编译部署SPS WebPart
本章概要: 1.理解web部件,什么时候需要创建一个 2.理解标准和可视web部件的不同 3.使用VS构建部署web部件
- RDIFramework.NET V2.9版本号 WinFom部分新增与修正的功能
RDIFramework.NET V2.9版本号 WinFom部分新增与修正的功能 转眼间RDIFramework.NET框架走了快6个年头了,随着一个版本号一个版本号的升级改造,如今已经越来越完美 ...
- spring batch(二):核心部分(1):配置Spring batch
spring batch(二):核心部分(1):配置Spring batch 博客分类: Spring 经验 java chapter 3.Batch configuration 1.spring ...