51Nod 1298 圆与三角形相交 计算几何
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 圆与三角形相交 计算几何相关推荐
- 51nod 1298:圆与三角形(计算几何)
题目链接 判断圆和三角形是否相交 可以转化为 判断三条线段是否和圆相交 #include<iostream> #include<cstdio> #include< ...
- 51Nod 1298 圆与三角形
题目链接: 51Nod 1298 圆与三角形 题目描述: 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No". ...
- 51nod 1298 圆与三角形
1298 圆与三角形 题目来源: HackerRank 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三 ...
- (图论)51NOD 1298 圆与三角形
给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0). 输入 第1行:一个数T,表示输入 ...
- 51nod 1298 圆与三角形(几何知识)
Description 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0). Inpu ...
- 51nod 1298
1298 圆与三角形 题目来源: HackerRank 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三 ...
- 51Nod-1298 圆与三角形
1298 圆与三角形 题目来源: HackerRank 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三 ...
- 51Nod 圆与三角形
给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0). Input 第1行:一个数T,表 ...
- 圆与三角形(圆与三角形是否相交)
给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0). Input 第1行:一个数T,表 ...
最新文章
- 关于Mongodb索引创建的一些体会
- python有道翻译-利用python写一个有道翻译的脚本
- Ffmpeg+Node.js+jsmpeg.js实现html5播放rtsp
- Android回调的简单理解
- 抽签小程序(C语言随机数),C# 抽签小程序
- [转]写好shell脚本的13个技巧
- java描边_shape描边设置是否显示四周描边
- leetcode 477. 汉明距离总和(位运算)
- 高并发系统之降级特技
- PHP系统管理mongodb,MongoDB的日常维护管理
- javascript 西瓜一期 09 字符与编码的对应关系 理解
- 工厂方法模式--简单试例
- 打工人的健康修炼记:2021卷里求生(附报告下载)
- 电脑网络安全_网络安全月 | 戳视频!帮你的电脑远离“黑客”
- vue项目如何集成良田高拍仪(二次开发)
- Kaldi中文语音识别:各种开源的已经训练好的语音识别模型
- 作为一名投资人,我经常会问创业者 8 个问题
- express 是什么
- Tibco Designer -- 循环遍历
- OCR:通用数码管图像识别训练和使用
热门文章
- SSM启动服务时将数据存入缓存
- [No0000D0] 让你效率“猛增十倍”,沉浸工作法到底是什么?
- hdu 4417 Super Mario 树状数组||主席树
- APUE学习之多线程编程(二):线程同步
- 判断一个字符串是否是由另2个字符串交错组成的
- iOS之播放音效(AVFoundation)
- IOS-关闭(退)键盘事件--转
- 引:善用backtrace解决大问题
- burst tx 功能 开启_Serverspeeder 锐速config配置文件详解
- 区块链分叉如何解决_什么是分叉区块链又该如何分叉