1298 圆与三角形 

基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题

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

Input

第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)

Output

共T行,对于每组输入数据,相交输出"Yes",否则输出"No"。

Input示例

2
0 0 10
10 0
15 0
15 5
0 0 10
0 0
5 0
5 5

Output示例

Yes
No

题解:

        通过顶点和圆心的距离将三角形和圆关系分为三类:

        1、部分顶点在圆内,此时必定相交;

        2、全部顶点在圆内,此时必定不相交;

        3、全部顶点在圆外,此时可能相交也可能不相交;

        对于第3种情况,我们知道只有同时符合以下两种情况是圆与三角形相交

        1、圆心到直线距离小于等于半径;d<=r;

               

       2、对应边和两顶点与圆心连线夹角为锐角(此时和圆心相距最短点在线段上); 

#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
double a,b,r;
struct node{
double x,y;
}p[4];
bool check()
{
double A,B,C,D,E,F;
for(int i=1;i<=3;i++)
for(int j=i+1;j<=3;j++){
A=p[j].y-p[i].y;
B=p[i].x-p[j].x;
C=p[j].x*p[i].y-p[i].x*p[j].y;
D=(A*a+B*b+C)*(A*a+B*b+C);
if(D<=(A*A+B*B)*r*r){//圆心到该直线的距离小于半径
E=(a-p[i].x)*(p[j].x-p[i].x)+(b-p[i].y)*(p[j].y-p[i].y);//向量相乘
F=(a-p[j].x)*(p[i].x-p[j].x)+(b-p[j].y)*(p[i].y-p[j].y);
if(E>0&&F>0)//两顶点对应夹角为锐角说明最小距离在两顶点之间
return 1;//找到相交边
}
}
return 0;
}
int main()
{
int T,cnt;
scanf("%d",&T);
while(T--)
{
cnt=0;//记录圆内三角形顶点个数
scanf("%lf%lf%lf",&a,&b,&r);
for(int i=1;i<=3;i++){
scanf("%lf%lf",&p[i].x,&p[i].y);//输入三个顶点
if((p[i].x-a)*(p[i].x-a)+(p[i].y-b)*(p[i].y-b)<=r*r)//判断该点是否在圆内
cnt++;
}
if(cnt>0&&cnt<3)//圆内有顶点但不包括全部则必相交
printf("Yes\n");
else if(cnt==3||!check())//三角形全部在内部或者全部在外面无相交边
printf("No\n");
else
printf("Yes\n");
}
return 0;
}

51Nod 1298 圆与三角形(计算几何)的更多相关文章

  1. 51nod 1298 圆与三角形——计算几何

    题目链接:http://www.51nod.com/Challenge/Problem.html#!#problemId=1298 转化成判断三条线段和圆是否

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

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

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

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

  4. 51nod 1298 圆与三角形

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

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

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

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

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

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

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

  8. 51nod1298 圆与三角形

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

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

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

随机推荐

  1. 海马玩模拟器——搭建React Native环境

    Visual Studio Emulator for Android 模拟器国内这网络环境不太用,所以使用海马玩模拟器,给大家推荐一下! 下面开始配置环境: 1)下载1.8+JDK,配置JDK环境参考 ...

  2. python3+selenium框架设计02-自动化测试框架需要什么

    什么是自动化测试框架 自动化测试框架能够提供便利给用户高效完成一些事情,比如,结构清晰开发脚本,多种方式.平台执行脚本,良好的日志和报告去跟踪脚本执行结果. 关于自动化测试框架的定义有很多,在我大致理 ...

  3. git与eclipse集成之文件回退

    1.1. 文件回退 1.1.1.        添加或修改文件回退,选择要回退的文件,右键Overwrite 1.1.2.        删除文件回退 选择要回退的文件,右键Overwrite 文件变 ...

  4. struts2框架之重复提交问题

    防止重复提交 1. 什么是重复提交 * 提交表单时,点击一次后,页面没有刷新时,马上又点击一次,就是重复提交 * 提交后,通过浏览器的回退,又回到了表单页面,再次提交 * 提交后,按F5刷新,也是重复 ...

  5. 【Tomcat】tomcat内存配置登记册

    20141202: 环境:windows2003 tomcat6.x jdk1.6 启动方式:windows服务方式启动 启动异常:java.lang.OutOfMemoryError: PermGe ...

  6. python中__init__ ,__del__ &__new__

    __new__ __new__方法是用来创建对象,__new__方法需要有一个返回值,这个返回值表示创建出来的对象的引用 __init__ __init__方法在类的一个对象被建立时 ,马上执行.__ ...

  7. 前端-----margin用法(盒子模型里补充)

    margin塌陷问题 当时说到了盒模型,盒模型包含着margin,为什么要在这里说margin呢?因为元素和元素在垂直方向上margin里面有坑. 我们来看一个例子: html结构: <div ...

  8. java结合testng,利用txt做数据源的数据驱动实例

    import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import java.io.Buffe ...

  9. sublime text3 golang插件(golang build)

    1 前言 先前条件: sublime text3:下载地址:http://www.sublimetext.com/3 golang:下载地址:https://golang.google.cn/dl/ ...

  10. Spring Cloud Sleuth超详细实战

    为什么需要Spring Cloud Sleuth 微服务架构是一个分布式架构,它按业务划分服务单元,一个分布式系统往往有很多个服务单元.由于服务单元数量众多,业务的复杂性,如果出现了错误和异常,很难去 ...