题目来源: HackerRank
基准时间限制: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

题意:中文题

思路:判断三角形是否与圆内相交,逆向思维考虑三角形与圆不相交的情况:

  • 三角形在圆内
  • 三角形全部在圆外,此时考虑任意一条三角形的边与圆相交即可成立,否则不相交
#include <iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
typedef long long ll;
typedef struct
{
ll x,y;
}point;
point A,B,C,O;
ll r; ll distance(point *p1,point *p2)//两点之间距离的平方
{
return (p1->x-p2->x)*(p1->x-p2->x)+(p1->y-p2->y)*(p1->y-p2->y);
} int pan_duan(point *p1,point *p2)
{
ll a,b,c,dist1,dist2,angle1,angle2;//ax+by+c=0;
if(p1->x==p2->x)
a=1,b=0,c=-p1->x;//特殊情况判断,分母不能为零
else if(p1->y==p2->y)
a=0,b=1,c=-p1->y;//特殊情况判断,分母不能为零
else
{
a=p1->y-p2->y;
b=p2->x-p1->x;
c=p1->x*p2->y-p1->y*p2->x;
}
dist1=a*O.x+b*O.y+c;
dist1*=dist1;
dist2=(a*a+b*b)*r*r;
if(dist1>dist2)return 0;//点到直线距离大于半径
angle1=(O.x-p1->x)*(p2->x-p1->x)+(O.y-p1->y)*(p2->y-p1->y);
angle2=(O.x-p2->x)*(p1->x-p2->x)+(O.y-p2->y)*(p1->y-p2->y);
if(angle1>0&&angle2>0)return 1;
return 0; } //判断是否相交,相交返回1,不相交返回0
int intersect()
{
ll distA=distance(&O,&A);//OA^2
ll distB=distance(&O,&B);//OB^2
ll distC=distance(&O,&C);//OC^2
ll r2=r*r;
if(distA<r2&&distB<r2&&distC<r2)//圆包含三角形
return 0;
else if(distA>r2&&distB>r2&&distC>r2)//三点都在圆外
{
return pan_duan(&A,&B)||pan_duan(&A,&C)||pan_duan(&B,&C); }
return 1;
} int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%lld%lld%lld%lld%lld%lld%lld%lld%lld",&O.x,&O.y,&r,&A.x,&A.y,&B.x,&B.y,&C.x,&C.y);
printf("%s\n",intersect()?"Yes":"No");
}
}

51nod1298 圆与三角形的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. 51nod 1298 圆与三角形

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

  7. 牛客网 牛客小白月赛1 E.圆与三角形-公式题

    E.圆与三角形   链接:https://www.nowcoder.com/acm/contest/85/E来源:牛客网     这个题把公式推一下, 发现就是1+sinA*r,sinA最大为1,所以 ...

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

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

  9. 51Nod 圆与三角形

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

随机推荐

  1. Jquery为DIV添加点击事件,Jquery为a标签超链接添加点击事件

    <div>1</div> <div>2</div> <div>3</div> <div>4</div> ...

  2. UEFI 下安装 ubuntu 及 win8 双系统 的一些事

    给电脑原装的win8系统装Ubuntu 出现了好多问题,重装多次,刷坏一块主板后,(都是泪啊...) 终于成功. 可能的问题 1:win8 系统下进入 blos 解决方案  1)关闭快速启动:管理员命 ...

  3. P1334 瑞瑞的木板 洛谷

    https://www.luogu.org/problem/show?pid=1334 题目描述 瑞瑞想要亲自修复在他的一个小牧场周围的围栏.他测量栅栏并发现他需要N(1≤N≤20,000)根木板,每 ...

  4. java设计模式——单例设计模式

    /*设计模式:对问题行之有效的解决方式.其实它是一种思想. 1,单例设计模式.    解决的问题:就是可以保证一个类在内存中的对象唯一性. 必须对于多个程序使用同一个配置信息对象时,就需要保证该对象的 ...

  5. fetch各种报跨域错误,数据无法获取的解决方案

    1.介绍 fetch 提供了一个获取资源的接口 (包括跨域). fetch 的核心主要包括:Request , Response , Header , Body 利用了请求的异步特性 --- 它是基于 ...

  6. [Jexus系列] 一、安装并运行 Jexus

    注意,本教程使用的jexus版本为5.8.3专业版,操作系统为 Ubunutu 16.04 64位 一.创建默认站点 不熟悉vim的可以看这个: vim超简单入门教程 sudo mkdir -p /v ...

  7. 用pc构建DIY计算集群

    -----------------------------------------------------------------用pc构建DIY计算集群目录/构建计算集群|-- /0前言|-- /1 ...

  8. easyui中点击datagrid的分页刷新按钮,数据无法更新到最新状态

    原因分析:点击刷新按钮是对当前页数据进行reload,因此所传的请求参数皆为上一次加载当前页的参数即datagrid的load方法中的参数,主要是因为请求的最终时间无法更新到最新状态 解决方案:对点击 ...

  9. windows安装Python模块:requests

    个人在windows10安装python模块requests如下过程: 1.下载requests模块:首先打开powershell, cd到你要下载文件的位置(我的是d:\softwareinstal ...

  10. js的调用函数前先执行某语句问题

    js的调用函数前先执行某语句问题 标签: web前端面试 2015-09-29 17:48 1455人阅读 评论(0) 收藏 举报  分类: js(5)  版权声明:本文为博主原创文章,未经博主允许不 ...