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

思路:直线与圆相交的关系,不明白的点击打开链接

ACDAIMA:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;
#define M 1010
#define LL long long
struct node
{LL x, y;
};
node no[3];
node c;
LL rl[3], r;
bool judge(node a, node b)//判断线段是否与圆相交
{LL al, bl, cl, num1, num2;//化成ax+by+c=0,找到a,b,c的值if(a.x == b.x){al=1, bl=0, cl=-a.x;}else if(a.y == b.y){al=0, bl=1, cl=-a.y;}else{al = b.y - a.y;bl = a.x - b.x;cl = b.x*a.y - a.x*b.y;}//点到直线的距离,判断直线是否可以与圆相交num1 = al*c.x + bl*c.y + cl;num1 *= num1;num2 = r*r*(al*al+bl*bl);if(num2 < num1){return 0;}//向量的计算LL angle1 = (c.x-a.x)*(b.x-a.x) + (c.y-a.y)*(b.y-a.y);//线段与圆是否相交的条件LL angle2 = (c.x-b.x)*(a.x-b.x) + (c.y-b.y)*(a.y-b.y);if(angle1>0 && angle2>0){return 1;}return 0;
}
int main()
{int t;scanf("%d", &t);while(t--){scanf("%lld%lld%lld", &c.x, &c.y, &r);for(int i=0; i<3; i++){scanf("%lld%lld", &no[i].x, &no[i].y);rl[i] = (no[i].x-c.x)*(no[i].x-c.x)+(no[i].y-c.y)*(no[i].y-c.y);rl[i] = rl[i] - r*r;}//有点在圆上if(!rl[0] || !rl[1] || !rl[2]){printf("Yes\n");continue;}//三个点都在圆内if(rl[0]<0&&rl[1]<0&&rl[2]<0){printf("No\n");continue;}//三个点都在圆外,特殊判断if(rl[0]>0&&rl[1]>0&&rl[2]>0){if(judge(no[0], no[1]) || judge(no[0], no[2]) || judge(no[1], no[2])){printf("Yes\n");}else{printf("No\n");}}else{printf("Yes\n");}}return 0;
}

51Nod - 1298相关推荐

  1. 51Nod - 1298(点到线段的距离)

    链接:51Nod - 1298 题意: 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于 ...

  2. 51Nod 1298 圆与三角形

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

  3. 51Nod 1298 圆与三角形相交 计算几何

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

  4. 51nod 1298 圆与三角形

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

  5. 51nod 1298

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

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

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

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

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

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

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

  9. vanilla js_用Vanilla js编写前端组件

    vanilla js There's so much hype these days around front-end frameworks (React, Angular, Vue) that I ...

最新文章

  1. 认知学习法-学习笔记
  2. JavaScript权威指南(第六版) 初读笔记
  3. python中sys用法_python中os和sys模块的区别与常用方法总结
  4. Servlet3.0 multipart 文件上传技术
  5. python列表推导式格式_Python列表推导式(for表达式)及用法
  6. logback日志模板与详解
  7. [C#] NPOI Excel解析
  8. opencv3.4.0在ubuntu16.04上的安装
  9. 该虚拟机似乎正在使用中。 如果该虚拟机未在使用,请按“获取所有权(T)”按钮获取它的所有权。否则,请按“取消(C)”按钮以防损坏。 配置文件: D:\instractPath\Developmen
  10. java cas原理_Java中的锁[原理、锁优化、CAS、AQS]
  11. Atitit. Class  元数据的反射操作 api apache  工具
  12. melogin.cn主页登录_melogincn首页 melogin·cn登录页面入口
  13. Matlab使用EMD
  14. 2021牛客多校10F Train Wreck (贪心,思维题)
  15. Google浏览器设置不自动更新:关闭谷歌浏览器自动更新方法(总是自动更新提示失败)
  16. zabbix为啥持续报警
  17. Python 批量转换视频音频采样率(附代码) | Python工具
  18. 敏捷下的scrim、xp、3355、TDD、BDD、CI、DI及四个仪式、十二原则汇总
  19. 如何将Excel多行单元格文字合并到一个单元格中
  20. i7 10700和10700f 10700k这三个CPU有什么区别

热门文章

  1. 如何适配处理iphoneX底部的横条 - ios
  2. Jmeter运行后,查看结果树中的响应数据出现中文乱码。
  3. iOS 企业签名与超级签名
  4. 2023年了,还是没学会内卷....
  5. 数学公式编辑器MathType 简介
  6. 浅谈Python中对象是如何被调用的
  7. 立象Argox A-50 打印机驱动
  8. 鲁迅名言——警醒自己
  9. Leetcode 592. 分数加减运算 C++
  10. 中文热门开源项目Top100,你知道多少?