POJ 1584 A Round Peg in a Ground Hole(点到直线距离,圆与多边形相交,多边形是否为凸)...
题意:给出一个多边形和一个圆,问是否是凸多边形,若是则再问圆是否在凸多边形内部。
分3步:
1、判断是否是凸多边形
2、判断点是否在多边形内部
3、判断点到各边的距离是否大于等于半径
上代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;#define maxn 2000
#define eps 10E-8struct Point
{double x, y;Point operator-(const Point &a) const{Point ret;ret.x = x - a.x;ret.y = y - a.y;return ret;}
} point[maxn], peg;double pegr;
int n;int dblcmp(double a)
{if (fabs(a) < eps)return 0;return a >0?1 : -1;
}double xmult(const Point &a, const Point &b)
{return a.x * b.y - b.x * a.y;
}void input()
{scanf("%lf%lf%lf", &pegr, &peg.x, &peg.y);for (int i =0; i < n; i++)scanf("%lf%lf", &point[i].x, &point[i].y);int t =0;int i =0;while (i < n && t ==0){t = dblcmp(xmult(point[(i +1)%n] - point[i], point[(i +2)%n] - point[i]));i++;}if (t <0)reverse(point, point + n);
}bool convex()
{for (int i =0; i < n; i++)if (dblcmp(xmult(point[(i +1)%n] - point[i], point[(i +2)%n] - point[(i +1)%n])) <0)return false;return true;
}bool inconvex()
{for (int i =0; i < n; i++)if (dblcmp(xmult(point[(i +1)%n] - point[i], peg - point[(i +1)%n])) <=0)return false;return true;
}double dist(const Point &a, const Point &b)
{Point p;p = a - b;return sqrt(p.x * p.x + p.y * p.y);
}bool ok()
{for (int i =0; i < n; i++)if (dblcmp(abs(xmult(peg - point[i], point[(i +1)%n] - point[i]))/dist(point[i], point[(i +1)%n]) - pegr) <0)return false;return true;
}int main()
{while (scanf("%d", &n) != EOF){if (n<3)break;input();if (!convex())printf("HOLE IS ILL-FORMED\n");else if (!inconvex()||!ok())printf("PEG WILL NOT FIT\n");elseprintf("PEG WILL FIT\n");}return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
转载于:https://www.cnblogs.com/wanglaoda/p/4937161.html
POJ 1584 A Round Peg in a Ground Hole(点到直线距离,圆与多边形相交,多边形是否为凸)...相关推荐
- POJ 1584 A Round Peg in a Ground Hole 判断凸多边形,点到线段距离,点在多边形内
ACM博客_kuangbin POJ 1584 A Round Peg in a Ground Hole(判断凸多边形,点到线段距离,点在多边形内) A Round Peg in a Ground H ...
- POJ - 1584 A Round Peg in a Ground Hole(综合几何)
题目链接:点击查看 题目大意:给出n个点,以及一个圆心和半径,首先判断这n个点能否构成凸包,若能,继续判断圆是否在凸包内 题目分析:这个题目确实非常综合,考察了判断凸包问题,判断圆是否在凸包内,只要保 ...
- 【POJ1584】A Round Peg in a Ground Hole,第一次的计算几何
Time:2016.07.15 Author:xiaoyimi 转载注明出处谢谢 思路: 算是计算几何的第一个题吧 判断是否为凸多边形用相邻边(向量)的叉积判断 (要求叉积的符号相同) 向量a,b,若 ...
- POJ 1584 计算几何 凸包
链接: http://poj.org/problem?id=1584 题意: 按照顺时针或逆时针方向输入一个n边形的顶点坐标集,先判断这个n边形是否为凸包. 再给定一个圆形(圆心坐标和半径),判断这个 ...
- poj 1584(凸包+点在凸多边形内+圆在凸多边形内)
题意: 按照顺时针或逆时针方向输入一个n边形的顶点坐标集,先判断这个n边形是否为凸包. 再给定一个圆形(圆心坐标和半径),判断这个圆是否完全在n边形内部. 解题思路: 1.判断该多边形是否是凸包,由于 ...
- poj 3082多边形相交 'Roid Rage
题意是判断多边形是否相交 主要的思路就是判断每一个点是否在另外的多变形内 判断一个点是否在另一个多边形内主要思路是: 判断的那个点向左边做射线,如果射线与多边形的交点为奇数个则在多边形内,偶数个则不在 ...
- 【POJ - 3304 】Segments(计算几何,思想转化,直线和线段相交)
题干: Given n segments in the two dimensional space, write a program, which determines if there exists ...
- Geometric Shapes - POJ 3449(多边形相交)
题目大意:给一些几何图形的编号,求出来这些图形都和那些相交. 分析:输入的正方形对角线上的两个点,所以需要求出来另外两个点,公式是: x2:=(x1+x3+y3-y1)/2; y2:=(y1+y3 ...
- 寒假-第一周-几何-(点线关系的问题)
寒假第一周:几何 POJ 2318 TOYS POJ 2398 Toy Storage(叉积判断左右+二分) POJ 3304 Segments(思维) POJ 1269 Intersecting L ...
最新文章
- 使用lucene进行group操作
- Spring Boot 添加拦截器的配置方式
- 完美解决 keil5.25 某宝Jlink无法使用问题
- 查看电脑电池损耗的命令
- tomcat(13)Host和Engine容器
- 两张表的笛卡尔积用sql语句
- python自动化部署工具_Python + Allure(报告)+ Jenkins(持续集成)接口自动化测试环境搭建...
- 测试 第七章 循环结构进阶 1205 草稿
- L2-4 哲哲打游戏 (25 分)
- textarea如何实现高度自适应?
- 配置接口IP地址并通过默认路由配置实现全网互通。
- vscode之调试js
- H5 新特性之 fileReader 实现本地图片视频资源的预览
- phpstudy使用mysql8.0_windows系统-phpstudy升级mysql8.0.12安装教程及修改密码和安装注意事项...
- STM32F205 PWM配置
- 史上最著名的电脑病毒
- 数据分析—用excel2016和python画箱线图
- Houdini17 OptiX Denoise使用
- 什么是有氧运动?什么是无氧运动?哪个减肥效果更好?
- FDMA/TDMA信号分析 IP core