1298 圆与三角形

给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交。相交输出"Yes",否则输出"No"。(三角形的面积大于0)。

 

收起

 

输入

第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 圆与三角形的更多相关文章

  1. 51nod1298圆与三角形——(二分法)

    1298 圆与三角形  题目来源: HackerRank 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 给出圆的圆心和半径,以及三角形的三个顶点,问圆同 ...

  2. 51nod-1298 圆与三角形(计算几何超详解)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1298 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是 ...

  3. 51nod1298 圆与三角形

    1298 圆与三角形 题目来源: HackerRank 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三 ...

  4. 51nod 1298 圆与三角形

    给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0).       输入 第1行:一个数 ...

  5. (图论)51NOD 1298 圆与三角形

    给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0).     输入 第1行:一个数T, ...

  6. 51nod 1298 圆与三角形 (计算几何)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1298 求出圆心到三条线段的最短距离,然后判断是否有顶点在圆外,就把全部情 ...

  7. 51nod_1298:圆与三角形(计算几何)

    题目链接 判断圆和三角形是否相交   可以转化为   判断三条线段是否和圆相交 #include<iostream> #include<cstdio> #include< ...

  8. 51Nod 1298 圆与三角形(计算几何)

    1298 圆与三角形  基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes&quo ...

  9. POJ - 1584 A Round Peg in a Ground Hole(判断凸多边形,点到线段距离,点在多边形内)

    http://poj.org/problem?id=1584 题意 按照顺时针或逆时针方向输入一个n边形的顶点坐标集,先判断这个n边形是否为凸包. 再给定一个圆形(圆心坐标和半径),判断这个圆是否完全 ...

随机推荐

  1. vue 子组件修改父组件传来的props值,报错

    vue不推荐直接在子组件中修改父组件传来的props的值,会报错 [Vue warn]: Avoid mutating a prop directly since the value will be ...

  2. hdu-4300(kmp或者拓展kmp)

    题意:乱七八糟说了一大堆,就是先给你一个长度26的字符串,对应了abcd....xyz,这是一个密码表.然后给你一个字符串,这个字符串是不完整的(完整的应该是前半部分是加密的,后半部分是解密了的),然 ...

  3. Android 修改 Menu字体颜色

    转载:http://blog.csdn.net/jayyuz/article/details/55260996 @Override public boolean onCreateOptionsMenu ...

  4. Scrapy爬取伯乐在线文章

    首先搭建虚拟环境,创建工程 scrapy startproject ArticleSpider cd ArticleSpider scrapy genspider jobbole blog.jobbo ...

  5. 洛谷P3258 松鼠的新家

    树上差分 这应该是一道很简单的树上差分了..就是问每个点被覆盖了多少次. 要注意我们最后dfs后,要把除第一个节点以外的所有点的-1,因为有些点作为起点和终点覆盖了两次,按照题目意思是不用覆盖两次的. ...

  6. hihocoder#1333 : 平衡树·Splay2 (区间操作)

    题面: #1333 : 平衡树·Splay2 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:好麻烦啊~~~~~ 小Hi:小Ho你在干嘛呢? 小Ho:我在干活啊! ...

  7. hz2016的noip模拟赛(d1 + d2)

    QAQ怕不是真的凉凉 d1 205 + d2 170 = 375 感觉难度和noip差不多 那么这可是有够凉的 官方题解 D1 D2 D1 T1 某地的ENLIGHTENED总部总部有N个Agent, ...

  8. 洛谷P5069 [Ynoi2015]纵使日薄西山(树状数组,set)

    洛谷题目传送门 一血祭 向dllxl致敬! 算是YNOI中比较清新的吧,毕竟代码只有1.25k. 首先我们对着题意模拟,寻找一些思路. 每次选了一个最大的数后,它和它周围两个数都要减一.这样无论如何, ...

  9. LVM-COW写实备份

    [root@localhost ~]# fdisk -l /dev/sdb /dev/sdc | grep "LVM"/dev/sdb1 1 9660 77593918+ 8e L ...

  10. [HEOI2014]平衡(整数划分数)

    下课了,露露.花花和萱萱在课桌上用正三棱柱教具和尺子摆起了一个“跷跷板”. 这个“跷跷板”的结构是这样的:底部是一个侧面平行于地平面的正三棱柱教具,上面 摆着一个尺子,尺子上摆着若干个相同的橡皮.尺子 ...