(点到线段的最短距离)51nod1298 圆与三角形
1298 圆与三角形


收起
输入
第1行:一个数T,表示输入的测试数量(1 <= T <= 10000),之后每4行用来描述一组测试数据。
4-1:三个数,前两个数为圆心的坐标xc, yc,第3个数为圆的半径R。(-3000 <= xc, yc <= 3000, 1 <= R <= 3000)
4-2:2个数,三角形第1个点的坐标。
4-3:2个数,三角形第2个点的坐标。
4-4:2个数,三角形第3个点的坐标。(-3000 <= xi, yi <= 3000)
输出
共T行,对于每组输入数据,相交输出"Yes",否则输出"No"。
输入样例
2
0 0 10
10 0
15 0
15 5
0 0 10
0 0
5 0
5 5
输出样例
Yes
No 思路:这个题是要分类讨论,先判断三角形的三个顶点的位置,如果三个顶点都在圆内,那么三角形一定与圆不想交,如果三个顶点都在圆外,那这个需要看情况讨论,详情见往后,其他的都可以认为与圆相交。
在三个顶点都在圆外的情况上,可以通过圆心到三角形的三个边的距离来判断,如果其中一个距离小于圆的半径,那么可以认为三角形与圆相交。
其中,需要注意的是:
这个距离是指的是点到线段的距离,而不是点到直线的距离!!!!!!
关于点到线段距离的参考链接:https://blog.csdn.net/betwater/article/details/52434017 C++代码:
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
struct Triangle{
double x,y;
}tri[];
double dis(double cx,double cy,Triangle a,Triangle b){
double k1 = (a.x - cx)*(a.x - b.x) + (a.y - cy)*(a.y - b.y);
if(k1 <= ){
return sqrt((a.x - cx)*(a.x - cx) + (a.y - cy)*(a.y - cy));
}
double k2 = (a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y);
if(k1 >= k2){
return sqrt((b.x - cx)*(b.x - cx) + (b.y - cy)*(b.y - cy));
}
double r = k1/k2;
double px = a.x + (b.x - a.x)*r;
double py = a.y + (b.y - a.y)*r;
return sqrt((cx - px)*(cx - px) + (cy - py)*(cy - py));
}
bool rr(double cx,double cy,double r,Triangle a,Triangle b){
double t = dis(cx,cy,a,b);
if(t <= r){
return true;
}
else{
return false;
}
}
bool cmp(double cx,double cy,double r,Triangle a,Triangle b,Triangle c){
double k1 = (a.x - cx)*(a.x - cx) + (a.y - cy)*(a.y - cy) - r*r;
double k2 = (b.x - cx)*(b.x - cx) + (b.y - cy)*(b.y - cy) - r*r;
double k3 = (c.x - cx)*(c.x - cx) + (c.y - cy)*(c.y - cy) - r*r;
if(k1< && k2< && k3<)
return false;
else if(k1> && k2> && k3>){
if(rr(cx,cy,r,a,b) || rr(cx,cy,r,a,c) || rr(cx,cy,r,b,c)){
return true;
}
else{
return false;
}
}
else
return true;
}
int main(){
int T;
scanf("%d",&T);
double cx,cy,r;
while(T--){
cin>>cx>>cy>>r;
for(int i = ; i < ; i++){
cin>>tri[i].x>>tri[i].y;
}
if(cmp(cx,cy,r,tri[],tri[],tri[])){
printf("Yes\n");
}
else
printf("No\n");
}
return ;
}
(点到线段的最短距离)51nod1298 圆与三角形的更多相关文章
- 51nod1298圆与三角形——(二分法)
1298 圆与三角形 题目来源: HackerRank 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出圆的圆心和半径,以及三角形的三个顶点,问圆同 ...
- 51nod-1298 圆与三角形(计算几何超详解)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1298 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是 ...
- 51nod1298 圆与三角形
1298 圆与三角形 题目来源: HackerRank 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三 ...
- 51nod 1298 圆与三角形
给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0). 输入 第1行:一个数 ...
- (图论)51NOD 1298 圆与三角形
给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0). 输入 第1行:一个数T, ...
- 51nod 1298 圆与三角形 (计算几何)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1298 求出圆心到三条线段的最短距离,然后判断是否有顶点在圆外,就把全部情 ...
- 51nod_1298:圆与三角形(计算几何)
题目链接 判断圆和三角形是否相交 可以转化为 判断三条线段是否和圆相交 #include<iostream> #include<cstdio> #include< ...
- 51Nod 1298 圆与三角形(计算几何)
1298 圆与三角形 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes&quo ...
- POJ - 1584 A Round Peg in a Ground Hole(判断凸多边形,点到线段距离,点在多边形内)
http://poj.org/problem?id=1584 题意 按照顺时针或逆时针方向输入一个n边形的顶点坐标集,先判断这个n边形是否为凸包. 再给定一个圆形(圆心坐标和半径),判断这个圆是否完全 ...
随机推荐
- Python学习之路—————day04
今日内容: 1. 循环语句 1.1 if判断 1.2 while循环 1.3 for循环 一.if判断 语法一: if 条件 代码块1 代码块2 代码块3 # 例: sex='female' age= ...
- 为AI提供数据:构建2017数据创新的总结
本周在微软年度大会上,我们正在讨论组织如何依靠开发人员创造突破性的经验.随着大数据,云和人工智能的融合,创新与破坏正在加速,从未见过.数据是这一融合核心的关键战略资产.当结合云的无限计算能力和机器学习 ...
- 把当前ubuntu系统做成镜像
把当前ubuntu系统做成镜像 2018年06月19日 15:24:51 还需要再学习一个 阅读数:9720 原文地址: http://community.bwbot.org/topic/167/%E ...
- Go指针相关
结合这个例子分析一下 结果: 结合以往C语言的基础,画了一张图来解释为什么会有上面这些值的出现.先查看下Go中的这两个运算符是啥吧. ①对于所有带a的结果 var a int = 1 定义了一个变量a ...
- python字符编码与文件打开
一 字符编码 储备知识点: 1.计算机系统分为三层: 应用程序 操作系统 计算机硬件 2.运行Python程序的三个步骤 1.先启动python解释器 2.再将python文件当做普通的文本文件读入内 ...
- 解决 phpstorm 运行卡,自动关闭等问题
解决 phpstorm 自动关闭问题: 使用文件搜索工具(可在本博客搜索“管理工具”,或查找安装目录) 找到phpstorm.vmoptions文件,使用记事本打开. 添加以下两行代码: -Dawt. ...
- MT【269】含参函数绝对值最大
设函数$f(x)=ax^2+(2b+1)x-a-2$($a,b\in\mathcal R$,$a\neq 0$). (1) 若$a=-2$,求函数$y=|f(x)|$在$[0,1]$上的最大值$M(b ...
- 可前端解密的加密方法探讨和str_replace和preg_replace分析
目的: 对字符串‘123456’进行后端加密,前端js可解密出真实字符 测试代码php: static $hashMap = array( '0' => '4', '1' => '9', ...
- Linux服务器定时健康检查,发生故障自动微信告警
此脚本适用于于各种Linux环境,可以实现各种监控项目,可自定义阀值,实现不同监控效果已在原有脚本基础上做了简化,提取了主要功能目前实现的有:1.磁盘监控2.内存监控3.cpu负荷监控4.进程数监控5 ...
- 洛谷P4891 序列(势能线段树)
洛谷题目传送门 闲话 考场上一眼看出这是个毒瘤线段树准备杠题,发现实在太难调了,被各路神犇虐哭qwq 考后看到各种优雅的暴力AC......宝宝心里苦qwq 思路分析 题面里面是一堆乱七八糟的限制和性 ...