POJ 1584 /// 判断圆(点)在多边形内 判断凸包
题目大意:
给定n,n边形
给定圆钉的 半径r 和圆心(x,y)
接下来n行是n边形的n个顶点(顺时针或逆时针给出)
判断n边形是否为凸包
若不是输出 HOLE IS ILL-FORMED
判断圆心和整个圆是否在多边形内
若是 输出 PEG WILL FIT
若不是 输出 PEG WILL NOT FIT
这道题 嗯 有个地方注意一下
就是多边形三点共线时也符合要求的凸包的
所以在检查是否符合凸包时 =0即共线的情况也是符合的
- int i=;
- /// 这里凸包的判断不能只是<0 应该是<=0
- while(i<=n && (p[i-1]-p[i%n]).det(p[(i+1)%n]-p[i])<=0) {
- i++;
- }
- if(i<=n) {
- reverse(p,p+n), i=;
- /// 这里凸包的判断不能只是<0 应该是<=0
- while(i<=n && (p[i-1]-p[i%n]).det(p[(i+1)%n]-p[i])<=0) {
- i++;
- }
- }
另外 判断圆心是否在多边形内部
只需要判断其所有边的 两端的向量叉积 是否一致
- #include <cstdio>
- #include <algorithm>
- #include <cmath>
- #include <cstring>
- using namespace std;
- const double eps=1e-;
- double add(double a,double b) {
- if(abs(a+b)<eps*(abs(a)+abs(b))) return ;
- return a+b;
- }
- struct P {
- double x,y;
- P(){};
- P(double _x,double _y):x(_x),y(_y){};
- P operator - (P p) {
- return P(add(x,-p.x),add(y,-p.y)); }
- P operator + (P p) {
- return P(add(x,p.x),add(y,p.y)); }
- P operator * (double d) {
- return P(x*d,y*d); }
- double dot(P p) {
- return add(x*p.x,y*p.y); }
- double det(P p) {
- return add(x*p.y,-y*p.x); }
- }p[],peg;
- double r;
- int n;
- double lenPP(P a,P b) {
- return sqrt((a-b).dot(a-b));
- } // a到b距离
- double disPL(P a,P b,P c) {
- return abs((a-c).det(b-c))/lenPP(a,b);
- } // c到直线ab距离
- bool check()
- {
- int i=, t=;
- while(i<=n && (p[i-]-p[i%n]).det(p[(i+)%n]-p[i%n])<=) {
- i++;
- } // 检查逆时针时是否为凸包
- if(i<=n) reverse(p,p+n); i=; // 不是则反向成逆时针
- while(i<=n && (p[i-]-p[i%n]).det(p[(i+)%n]-p[i%n])<=) {
- i++;
- } // 检查逆时针时是否为凸包
- if(i<=n) return ;
- return ;
- }
- bool solve()
- {
- for(int i=;i<n;i++) {
- if((p[i]-peg).det(p[(i+)%n]-peg)<=) return ;
- // 判断圆心是否在多边形内
- if(disPL(p[i],p[(i+)%n],peg)<r) return ;
- // 判断圆心与边的距离是否大于半径
- }
- return ;
- }
- int main()
- {
- while(~scanf("%d",&n)) {
- if(n<) break;
- scanf("%lf%lf%lf",&r,&peg.x,&peg.y);
- for(int i=;i<n;i++) scanf("%lf%lf",&p[i].x,&p[i].y);
- if(check()) {
- printf("PEG WILL ");
- if(solve()) printf("FIT\n");
- else printf("NOT FIT\n");
- }
- else printf("HOLE IS ILL-FORMED\n");
- }
- return ;
- }
POJ 1584 /// 判断圆(点)在多边形内 判断凸包的更多相关文章
- A Round Peg in a Ground Hole - POJ 1584 (判断凸多边形&判断点在多边形内&判断圆在多边形内)
题目大意:首先给一个圆的半径和圆心,然后给一个多边形的所有点(多边形按照顺时针或者逆时针给的),求,这个多边形是否是凸多边形,如果是凸多边形在判断这个圆是否在这个凸多边形内. 分析:判断凸多边形可 ...
- 百度地图 判断marker是否在多边形内
昨天画了圆形,判marker是否存在圆形内.今天来画多边形,判断marker在多边形内. 需要引入一个js <script type="text/javascript&quo ...
- hrbustoj 1429:凸多边形(计算几何,判断点是否在多边形内,二分法)
凸多边形 Time Limit: 2000 MS Memory Limit: 65536 K Total Submit: 130(24 users) Total Accepted: 40(1 ...
- C# 判断点是否在多边形内
/// <summary>/// 判断点是否在多边形内/// </summary>/// <param name="pnt">点</par ...
- hrbustoj 1306:再遇攻击(计算几何,判断点是否在多边形内,水题)
再遇攻击 Time Limit: 1000 MS Memory Limit: 65536 K Total Submit: 253(37 users) Total Accepted: 56(2 ...
- zoj 1081:Points Within(计算几何,判断点是否在多边形内,经典题)
Points Within Time Limit: 2 Seconds Memory Limit: 65536 KB Statement of the Problem Several dra ...
- [zoj] 1081 Points Within || 判断点是否在多边形内
原题 多组数据. n为多边形顶点数,m为要判断的点数 按逆时针序给出多边形的点,判断点是否在多边形内,在的话输出"Within",否则输出"Outside" / ...
- PHP 判断点是否在多边形内
如何判断一个点是否在一个多边形内,何时会用到这个场景. 我们就模拟一个真是场景.我们公司是快递公司,在本地区域有6个分点.每个分点有3-5个工人负责附近的快递派遣发送,所以根据每个点的服务区域我们就能 ...
- c# 判断点是否在区域内 点在区域内 在多边形内 判断
方法一 算法 : public int isLeft(Point P0, Point P1,Point P2) { int abc= ((P1.X - P0.X) ...
随机推荐
- JavaWeb学习篇之----Session&&Cookie
今天继续来看看JavaWeb的相关知识,这篇文章主要来讲一下Session和Cookie的相关知识,首先我们来看一下Cookie的相关知识: 一.Cookie 简介: Cookie是客户端技术,服务器 ...
- bzoj1001题解
[解题思路] 显然,这题的答案是这个网格图的最小割.根据最大流-最小割定理,我们可以用网络流算法来求其最小割,时间复杂度最小为O(V2√E). 特殊的,这个网格图是一个平面图,于是可以根据平面图最小割 ...
- (转)Linux负载均衡软件LVS之一(概念篇)
转:http://ixdba.blog.51cto.com/2895551/552947 Linux负载均衡软件LVS之二(安装篇):http://ixdba.blog.51cto.com/28955 ...
- (转)ab(apachebench)测试与loadrunner
转:http://blog.csdn.net/gzh0222/article/details/7172341 ab的全称是ApacheBench,是 Apache 附带的一个小工具,专门用于 HTTP ...
- spring 配置bean以及配置依赖 (2)
目录 一.使用ref引用其他对象 二.通过有参构造器创建对象 1 通过index精确定位参数顺序 三.引用bean 1 使用内部bean 2 使用list,set 3 声明集合类型 四.其他 1 使用 ...
- P2004 领地选择
P2004 领地选择 题目描述 作为在虚拟世界里统帅千军万马的领袖,小Z认为天时.地利.人和三者是缺一不可的,所以,谨慎地选择首都的位置对于小T来说是非常重要的. 首都被认为是一个占地C*C的正方形. ...
- 数据结构C++版-队列
一.概念 分类: 二.补充说明 1.<面向对象的队列设计>课程问答: 首先要明确数据结构和数据存储结构的概念. 数据结构是指数据对象之间的逻辑关系,例如二叉树,队列,栈等,而数据存储结构是 ...
- 4 丑数 Ⅱ-找出第n个丑数
原题网址:http://www.lintcode.com/zh-cn/problem/ugly-number-ii/ 设计一个算法,找出只含素因子2,3,5 的第 n 小的数. 符合条件的数如:1, ...
- Linux下rsync的安装及简单使用
2018-09-25 15:39:04 一.RSYNC安装环境: centos6.5 iptables关闭和selinux为disabled 源码安装:到rsync官网下载rsync源码安装包,上传到 ...
- 【2018ACM/ICPC网络赛】焦作赛区
A Magic Mirror 题目链接:https://nanti.jisuanke.com/t/31710 题意:输入字符串,如果是“Jessy”就输出“Good Guy!",否则输出“D ...