51nod1298 圆与三角形


第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)
共T行,对于每组输入数据,相交输出"Yes",否则输出"No"。
2
0 0 10
10 0
15 0
15 5
0 0 10
0 0
5 0
5 5
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 圆与三角形的更多相关文章
- (点到线段的最短距离)51nod1298 圆与三角形
1298 圆与三角形 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0). 收起 ...
- 51nod-1298 圆与三角形(计算几何超详解)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1298 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是 ...
- 51nod1298圆与三角形——(二分法)
1298 圆与三角形 题目来源: HackerRank 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出圆的圆心和半径,以及三角形的三个顶点,问圆同 ...
- 51nod_1298:圆与三角形(计算几何)
题目链接 判断圆和三角形是否相交 可以转化为 判断三条线段是否和圆相交 #include<iostream> #include<cstdio> #include< ...
- 51Nod 1298 圆与三角形(计算几何)
1298 圆与三角形 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes&quo ...
- 51nod 1298 圆与三角形
给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0). 输入 第1行:一个数 ...
- 牛客网 牛客小白月赛1 E.圆与三角形-公式题
E.圆与三角形 链接:https://www.nowcoder.com/acm/contest/85/E来源:牛客网 这个题把公式推一下, 发现就是1+sinA*r,sinA最大为1,所以 ...
- (图论)51NOD 1298 圆与三角形
给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0). 输入 第1行:一个数T, ...
- 51Nod 圆与三角形
给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0). Input 第1行:一个数T ...
随机推荐
- android开发里跳过的坑-AS导入NDK工程提示错误 No such property: sdkHandler for class: com.android.build.gradle.LibraryPlugin
接到一个NDK工程需要调试,导入后发现总是提示错误 Error:(37, 1) A problem occurred evaluating project ':libuvccamera'.> N ...
- 洛谷—— P3370 【模板】字符串哈希
P3370 [模板]字符串哈希 题目描述 如题,给定N个字符串(第i个字符串长度为Mi,字符串内包含数字.大小写字母,大小写敏感),请求出N个字符串中共有多少个不同的字符串. 友情提醒:如果真的想好好 ...
- 选择器(E:hover/E:active/E:focus的使用)
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head><meta ...
- echarts模拟highcharts实现折线图的虚实转换
多的不说直接上代码: <html><html lang="en"><head> <meta charset="utf-8&quo ...
- spring,spring mvc之所以起作用是因为开启了注解解释器,即spring的annotation on
spring,spring mvc之所以起作用是因为开启了注解解释器,即spring的annotation on
- Linux命令输出头(标题)、输出结果排序技巧
原文:http://blog.csdn.net/hongweigg/article/details/65446007 ----------------------------------------- ...
- Java循环中删除一个列表元素
本文主要想讲述一下我对之前看到一篇文章的说法.假设跟你的想法有出入,欢迎留言.一起讨论. #3. 在循环中删除一个列表元素 考虑以下的代码.迭代过程中删除元素: ArrayList<String ...
- 1072. Gas Station (30)【最短路dijkstra】——PAT (Advanced Level) Practise
题目信息 1072. Gas Station (30) 时间限制200 ms 内存限制65536 kB 代码长度限制16000 B A gas station has to be built at s ...
- Word Break II 求把字符串拆分为字典里的单词的全部方案 @LeetCode
这道题相似 Word Break 推断能否把字符串拆分为字典里的单词 @LeetCode 只不过要求计算的并不不过能否拆分,而是要求出全部的拆分方案. 因此用递归. 可是直接递归做会超时,原因是Le ...
- mysql 经常使用命令整理总结
#改动字段类型 alter table `table_name` modify column ip varchar(50); #添加字段 alter table `table_name` add ip ...