51nod 1298 圆与三角形


输入
第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 题意是求圆与三角形是否相交,即是否有交点,实际上就是求圆心到三边的距离,不过 要注意这里的边是线段,可不是求到直线的距离,如果三个点都在圆内或者圆心到三条边的距离都大于半径,那么就是不相交,其他的情况相交,
点与点之间的距离很好求,点到线的距离可以借助海伦公式,海伦公式求出点与边两点组成三角形的面积,而面积又等于点到直线的距离*边长/2,以此能求出点到直线距离,还要另外分点到直线距离不等于点到线段距离的情况。
还有精度问题,全程用浮点数,判断相等的情况要用到精度,不然可能出错。
代码:
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#define MAX 101
#define eps 1e-6
using namespace std;
typedef pair<double,double> pa;
int t;
double r;
pa cir,a,b,c;
double ptop(pa x,pa y) {///点到点
return sqrt((x.first - y.first) * (x.first - y.first) + (x.second - y.second) * (x.second - y.second));
}
double ptol(pa p,pa la,pa lb) {///点到线
double x = ptop(p,la);
double y = ptop(p,lb);
double z = ptop(lb,la);
if(x * x >= y * y + z * z) return y;///不能用点到直线
if(y * y >= x * x + z * z) return x;///不能用点到直线
double hc = (x + y + z) / ;
return sqrt(hc * (hc - x) * (hc - y) * (hc - z)) * / z;///点到直线
}
bool check(pa p,double rr,pa x,pa y,pa z) {
if(ptop(cir,x) - rr < -eps && ptop(cir,y) - rr < -eps && ptop(cir,z) - rr < -eps
|| ptol(p,x,y) - rr > eps && ptol(p,z,y) - rr > eps && ptol(p,x,z) - rr > eps) return false;
return true;
} int main() {
scanf("%d",&t);
while(t --) {
scanf("%lf%lf%lf%lf%lf%lf%lf%lf%lf",&cir.first,&cir.second,&r,&a.first,&a.second,&b.first,&b.second,&c.first,&c.second);
if(check(cir,r,a,b,c)) puts("Yes");
else puts("No");
}
}
51nod 1298 圆与三角形的更多相关文章
- 51Nod 1298 圆与三角形(计算几何)
1298 圆与三角形 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes&quo ...
- (图论)51NOD 1298 圆与三角形
给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0). 输入 第1行:一个数T, ...
- 51nod 1298:圆与三角形(计算几何)
题目链接 判断圆和三角形是否相交 可以转化为 判断三条线段是否和圆相交 #include<iostream> #include<cstdio> #include< ...
- 51nod 1298 圆与三角形——计算几何
题目链接:http://www.51nod.com/Challenge/Problem.html#!#problemId=1298 转化成判断三条线段和圆是否
- 51nod 1298 圆与三角形 (计算几何)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1298 求出圆心到三条线段的最短距离,然后判断是否有顶点在圆外,就把全部情 ...
- 51nod1298圆与三角形——(二分法)
1298 圆与三角形 题目来源: HackerRank 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出圆的圆心和半径,以及三角形的三个顶点,问圆同 ...
- (点到线段的最短距离)51nod1298 圆与三角形
1298 圆与三角形 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0). 收起 ...
- 51nod1298 圆与三角形
1298 圆与三角形 题目来源: HackerRank 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三 ...
- 51Nod 圆与三角形
给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0). Input 第1行:一个数T ...
随机推荐
- ThreadLocal管理登录信息
通常在项目中,用户登录后,我们会将用户的信息存到session,如果想在其它地方获取session中的用户信息,我们需要先获取HttpServletRequest,再通过request.getSess ...
- JavaScript delete用法,属性,特性,执行上下文,激活对象 综合篇
一.问题的提出 我们先来看看下面几段代码,要注意的是,以下代码不要在浏览器的开发者工具(如FireBug.Chrome Developer tool)中运行,原因后面会说明: 为什么我们可以删除对象的 ...
- centos 安装 mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz 详细步骤
1.卸载Linux系统上自带的mysql插件(old版本) 查找mysql相关安装: rpm -qa|grep -i mysql 可能会出现以下的一个或多个,没有更好,说明你的系统很干净,但是以防万一 ...
- quartz(4)--quartz.properties文件
Quartz有一个叫做quartz.properties的配置文件,它允许你修改框架运行时环境.缺省是使用Quartz.jar里面的quartz.properties文件.当然你应该创建一个quart ...
- Mine_hibernate
1. __z知识点\整理_归纳 ==> "ZC_归纳.txt" 和 "ZC_归纳__12_用Eclipse开发hibernate.txt" 2.
- angularjs笔记(1)
https://github.com/angular/angular.js/blob/master/src/ng/q.js 1.ng-app 指令告诉 AngularJS,<div> 元素 ...
- jenkins的Master/Slave模式
一. Master/Slave模式 分担jenkins服务器的压力,任务分配到其它执行机来执行 Master:Jenkins服务器 Slave:执行机(奴隶机).执行Master分配的任务,并返回任务 ...
- lightoj1138
二分 #include<map> #include<set> #include<cmath> #include<queue> #include<s ...
- JAVA Eclipse 快捷键
一. 最常见的: a) 内容提示:Alt + / b) 快速修复:Ctrl + 1 c) 导包:Ctrl + shift + O d) 格式化代码块 ...
- Qt事件系统基本概念
(转自:http://www.cnblogs.com/andy1987/p/3322059.html) 1. QT事件系统 Qt应用程序的消息处理是基于事件驱动的,程序的每个动作都是由某个事件所触发的 ...