Broken line - SGU 124(判断点与多边形的关系)
题目大意:RT
分析:构造一条射线,如果穿越偶数条边,那么就在多边形外面,如果穿越奇数条边,那么就在多边形里面。
代码如下:
===========================================================================================================================
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
using namespace std; const int MAXN = 1e4+;
const double EPS = 1e-;
const double FarX = 1e5+; int Sign(double x)
{
if(x > EPS)return ;
if(fabs(x) <= EPS)return ;
return -;
} struct point
{
double x, y;
point(double x=, double y=):x(x),y(y){}
point operator - (const point &t)const{
return point(x-t.x, y-t.y);
}
double operator ^(const point &t)const{
return x*t.y - y*t.x;
}
};
struct segment
{
point s, e; segment(point s=, point e=):s(s), e(e){}
bool OnSeg(const point &p)
{///判断点是否在线段上
if(Sign((s-e)^(p-e)) == )///共线
if(Sign((p.x-s.x)*(p.x-e.x)) <= )///位于线段的中间或者两端
if(Sign((p.y-s.y)*(p.y-e.y)) <= )
return true;
return false;
}
bool Inter(const segment &t)
{///完全相交情况
return Sign((s-e)^(t.s-e))*Sign((s-e)^(t.e-e)) == -;
}
};
int Find(segment sg[], int N, point &p)
{///判断点与多边形的关系,在多边形上返回0,内返回1,外返回-1
///使用射线法判断,判断穿越的边是奇数还是偶数,奇数说明在里面,偶数说明在外面
segment ray(p, point(FarX, p.y));///构造射线 int cnt = ; for(int i=; i<N; i++)
{
if(sg[i].OnSeg(p))
return ;///如果点在边界上 if(ray.OnSeg(sg[i].s))///如果穿越点,记录y值小的
{///如果穿过s点
if(sg[i].e.y - sg[i].s.y > EPS)
cnt += ;
}
else if(ray.OnSeg(sg[i].e))
{
if(sg[i].s.y - sg[i].e.y > EPS)
cnt += ;
}
else if(ray.Inter(sg[i]) && sg[i].Inter(ray))
cnt += ;
} if(cnt % )
return ;
return -;
} int main()
{
segment sg[MAXN];
point A, B, p;
int i, N; scanf("%d", &N); for(i=; i<N; i++)
{
scanf("%lf%lf%lf%lf", &A.x, &A.y, &B.x, &B.y);
sg[i] = segment(A, B);
}
scanf("%lf%lf", &p.x, &p.y); int ans = Find(sg, N, p); if(ans == )
printf("BORDER\n");
else if(ans == )
printf("INSIDE\n");
else
printf("OUTSIDE\n"); return ;
}
Broken line - SGU 124(判断点与多边形的关系)的更多相关文章
- C# GDI+ 利用 Rectangle GraphicsPath 判断 矩形或多边形 图形关系
最近在做一些简单的图像对比工作,总结了一些GDI+对象的使用方式,记录下来共享给大家使用. 判断Rectangl与多边形的关系 /// <summary> /// 是否包含输入范围 /// ...
- Unity3D 中判断点与多边形的关系
由点发出的射线与多边形边的交点个数,如果是偶数个说明在多边形的外面,交点个数为奇数个在多边形的内部,下面是代码: public bool IsPointInPolygon(Vector2 point, ...
- A Round Peg in a Ground Hole(判断是否是凸包,点是否在凸包内,圆与多边形的关系)
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4628 Accepted: 1434 Description The D ...
- SGU 124. Broken line 射线法 eps的精准运用,计算几何 难度:3
124. Broken line time limit per test: 0.25 sec. memory limit per test: 4096 KB There is a closed bro ...
- zoj 1081 判断点在多边形内
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=81Points Within Time Limit: 2 Second ...
- 判断点在多边形内算法的C++实现
目录 1. 算法思路 2. 具体实现 3. 改进空间 1. 算法思路 判断平面内点是否在多边形内有多种算法,其中射线法是其中比较好理解的一种,而且能够支持凹多边形的情况.该算法的思路很简单,就是从目标 ...
- hdu 1756:Cupid's Arrow(计算几何,判断点在多边形内)
Cupid's Arrow Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- R树判断点在多边形内-Java版本
1.什么是RTree 待补充 2.RTree java依赖 rtree的java开源版本在GitHub上:https://github.com/davidmoten/rtree 上面有详细的使用说明 ...
- matlab练习程序(射线法判断点与多边形关系)
依然是计算几何. 射线法判断点与多边形关系原理如下: 从待判断点引出一条射线,射线与多边形相交,如果交点为偶数,则点不在多边形内,如果交点为奇数,则点在多边形内. 原理虽是这样,有些细节还是要注意一下 ...
随机推荐
- 邓白氏编码(duns number)申请入口的路径-苹果开发者申请必
http://tieba.baidu.com/p/3861287522 这个网址有详细的介绍
- 【html】【4】html事件集合
必看参考: http://www.runoob.com/tags/ref-eventattributes.html http://www.cnblogs.com/jiangchongwei/archi ...
- Codevs 1337 银行里的迷宫
1337 银行里的迷宫 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 传送门 题目描述 Description 楚楚每一次都在你的帮助下过了一关又一关(比如他开 ...
- angularjs应用骨架(2)
时隔一个星期,接着上一篇的angularjs应用骨架继续聊聊angularjs其他的其他的内容. 区分UI和控制器的职责 在应用控制器中有三种职责: 1.为应用中模型设置初始状态 2.通过$scope ...
- LINUX 添加定时任务
LINUX 添加定时任务 crontab - l按 i:x 先按 esc然后 敲入 命令 :x*/5 3 * * 0 /root/ v.sh ..重启服务 service crond restart
- WPF自定义窗口(Windows Server 2012 Style)
先上图 新建CustomControl,名:HeaderedWindow Themes\Generic.aml文件夹下加入 笔刷,转换器 <SolidColorBrush x:Key=" ...
- [CSS]border边框
border: 1px solid #ccc; /*1像素 实线 灰色*/可分割成:border-width:1px;border-style: solid; border-color: #00 ...
- 【python】python支持中文变量,醉了
哈哈 = 1 呜呜 = -1 哈哈 + 呜呜 = 0
- Django 入门
Django 入门 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模型,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容 ...
- 写了几天的博客-feel
写博客 真的总结我自己的知识.长见识了.记录下自己遇到的东西,算是一个总结,有问题了,还可以回头看一下.很好 真的很好.