51Nod-1298-圆与三角形

给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交。相交输出"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"。

Sample Input

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

Sample Output

Yes
No

分析:

样例1的解释

样例2的解释

1.三点全部在圆内,输出No 
2.三点全部在圆外
重点:判断三角形三条边是否存在和圆相交的点
问题就转化为判断线段是否与圆相交

3.其他情况全部是相交

核心代码:

//判断线段是否和圆相交
bool seg_circle(Point p1, Point p2)
{ll a, b, c, dis1, dis2, angle1, angle2;//ax+by+c=0if (p1.x == p2.x){a = 1;b = 0;c = -p1.x;//垂直于x轴 }else if (p1.y == p2.y) {a = 0;b = 1;c = -p1.y;//垂直于y轴 }else {a = p1.y - p2.y;b = p2.x - p1.x;c = p1.x*p2.y - p1.y*p2.x;}dis1 = a*o.x + b*o.y + c;dis1 *= dis1;dis2 = (a*a + b*b)*r*r;if (dis1>dis2)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;
}

AC代码

#include<cstdio>
using namespace std;
typedef long long ll;
struct Point {ll x, y;
}p[4];
Point o;//圆心
ll r;//半径 //距离的平方
ll distance(Point a, Point b)
{return (a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y);
}//判断线段是否和圆相交
bool seg_circle(Point p1, Point p2)
{ll a, b, c, dis1, dis2, angle1, angle2;//ax+by+c=0if (p1.x == p2.x){a = 1;b = 0;c = -p1.x;//垂直于x轴 }else if (p1.y == p2.y) {a = 0;b = 1;c = -p1.y;//垂直于y轴 }else {a = p1.y - p2.y;b = p2.x - p1.x;c = p1.x*p2.y - p1.y*p2.x;}dis1 = a*o.x + b*o.y + c;dis1 *= dis1;dis2 = (a*a + b*b)*r*r;if (dis1>dis2)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;
}
//判断圆和三角形是否相交
bool intersect()
{ll d0 = distance(o, p[0]), d1 = distance(o, p[1]),  d2 = distance(o, p[2]);ll r2 = r*r;//三点在圆内 if (d0<r2&&d1<r2&&d2<r2)return 0;//三点在圆外 else if (d0>r2&&d1>r2&&d2>r2)return seg_circle(p[0], p[1]) || seg_circle(p[0], p[2]) || seg_circle(p[1], p[2]);return 1;
}
int main()
{//ios::sync_with_stdio(0);int t;scanf("%d", &t);while (t--) {scanf("%lld%lld%lld", &o.x, &o.y, &r);for (int i = 0;i<3;i++)scanf("%lld%lld", &p[i].x, &p[i].y);printf("%s\n", intersect() ? "Yes" : "No");}return 0;
}

51Nod 1298 圆与三角形相交 计算几何相关推荐

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

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

  2. 51Nod 1298 圆与三角形

    题目链接: 51Nod 1298 圆与三角形 题目描述: 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No". ...

  3. 51nod 1298 圆与三角形

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

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

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

  5. 51nod 1298 圆与三角形(几何知识)

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

  6. 51nod 1298

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

  7. 51Nod-1298 圆与三角形

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

  8. 51Nod 圆与三角形

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

  9. 圆与三角形(圆与三角形是否相交)

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

最新文章

  1. 关于Mongodb索引创建的一些体会
  2. python有道翻译-利用python写一个有道翻译的脚本
  3. Ffmpeg+Node.js+jsmpeg.js实现html5播放rtsp
  4. Android回调的简单理解
  5. 抽签小程序(C语言随机数),C# 抽签小程序
  6. [转]写好shell脚本的13个技巧
  7. java描边_shape描边设置是否显示四周描边
  8. leetcode 477. 汉明距离总和(位运算)
  9. 高并发系统之降级特技
  10. PHP系统管理mongodb,MongoDB的日常维护管理
  11. javascript 西瓜一期 09 字符与编码的对应关系 理解
  12. 工厂方法模式--简单试例
  13. 打工人的健康修炼记:2021卷里求生(附报告下载)
  14. 电脑网络安全_网络安全月 | 戳视频!帮你的电脑远离“黑客”
  15. vue项目如何集成良田高拍仪(二次开发)
  16. Kaldi中文语音识别:各种开源的已经训练好的语音识别模型
  17. 作为一名投资人,我经常会问创业者 8 个问题
  18. express 是什么
  19. Tibco Designer -- 循环遍历
  20. OCR:通用数码管图像识别训练和使用

热门文章

  1. SSM启动服务时将数据存入缓存
  2. [No0000D0] 让你效率“猛增十倍”,沉浸工作法到底是什么?
  3. hdu 4417 Super Mario 树状数组||主席树
  4. APUE学习之多线程编程(二):线程同步
  5. 判断一个字符串是否是由另2个字符串交错组成的
  6. iOS之播放音效(AVFoundation)
  7. IOS-关闭(退)键盘事件--转
  8. 引:善用backtrace解决大问题
  9. burst tx 功能 开启_Serverspeeder 锐速config配置文件详解
  10. 区块链分叉如何解决_什么是分叉区块链又该如何分叉