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) ...
随机推荐
- Batch - FOR %%a %%b
总结 %%a refers to the name of the variable your for loop will write to. Quoted from for /?: FOR %vari ...
- php的字符串{}选定与{变量}
$str = "abcdefg"; echo $str{2};//输出c $a = "test"; echo "ddd{$a}";//输出d ...
- Vue的data选项使用注意
使用组件时,大多数可以传入到Vue构造器中的选项可以在Vue extend()或 Vue.component() 中注册组件时使用,但是有一个重要的前提:data必须是函数 .在 var vm = n ...
- NX二次开发-UFUN创建表达式UF_MODL_create_exp无TAG
NX9+VS2012 #include <uf.h> #include <uf_modl.h> UF_initialize(); //创建一个新的表达式,无TAG UF_MOD ...
- window location跳转
"top.location.href"是最外层的页面跳转"window.location.href"."location.href"是本页面 ...
- hexo next主题深度优化(二),懒加载。
文章目录 tip:没有耐心的可以直接看:正式在hexo next中加入懒加载(最下面) 废话 背景 懒加载简单介绍 引入js 重点!敲黑板了!!! 完善懒加载函数 懒加载函数可配置的参数 正式在hex ...
- java-day12
数据结构 常用的数据存储结构:栈,队列,数组,列表,红黑树. 栈:先进后出(入口和出口在用一侧) 队列:先进先出 数组: 查询快:因为数组的地址是连续的,通过数组的首地址找到数组中的元素. 增/删慢: ...
- 分道扬镳 /// 邻接表 DFS 剪枝 oj1332
题目大意: 编号为1…N 的N个城市之间以单向路连接,每一条道路有两个参数:路的长度和通过这条路需付的费用. Bob和Alice生活在城市1,但是当Bob发现了Alice玩扑克时欺骗他之后,他决定与她 ...
- Springboot整合dubbo搭建基本的消费、提供和负载均衡
文章目录 1.确定接口 2.创建提供者 2.1 pom配置 2.2dubbo配置文件 2.3 application.properties 2.4 mybatis相关 2.4.1 配置UserMapp ...
- centos安装与配置R语言
Linux下安装R语言 一.编译安装 由于采用编译安装,所以需要用到gcc编译环境,在编译前check文件时还会用到libXt-devel和readline-devel两个依赖,所以在编译R语言源码时 ...