51nod 1298 圆与三角形
2016-07-21 17:41
459 查看
1298 圆与三角形
题目来源: HackerRank
基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
收藏
关注
给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交。相交输出"Yes",否则输出"No"。(三角形的面积大于0)。
Input
Output
Input示例
Output示例
点和线段的关系大致可以有下面几
(海伦公式) 秦九韶公式(与海伦公式等价) 这俩公式自己百度去
在程序中主要使用秦九韶公式, 因为海伦公式在计算的时候中途可能会造成误差。(看不懂说明你没读懂题)
题目来源: HackerRank
基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
收藏
关注
给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交。相交输出"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
点和线段的关系大致可以有下面几
(海伦公式) 秦九韶公式(与海伦公式等价) 这俩公式自己百度去
在程序中主要使用秦九韶公式, 因为海伦公式在计算的时候中途可能会造成误差。(看不懂说明你没读懂题)
#include <iostream> #include <string> #include <cstring> #include <stdio.h> #include <cmath> #include<cstdio> #include<cstring> #include<cmath> using namespace std; int main() { int t; cin>>t; while(t--) { double a[3],x[4],y[4]; int i; for(i=0;i<3;i++) cin>>a[i]; for(i=0;i<3;i++) cin>>x[i]>>y[i]; double max1=0,max2=0,sum; double r=a[2]; for(i=0;i<3;i++) { sum=(x[i]-a[0])*(x[i]-a[0])+(y[i]-a[1])*(y[i]-a[1]); sum=sqrt(sum); if(sum>=a[2]) max1=1; if(sum<=a[2]) max2=1; //cout<<sum<<" "<<a[2]<<' '<<max1<<' '<<max2<<endl; <strong>//这个是用来判断点是在圆内还是外</strong> }int z=0; if(max1==1&&max2==1) z=1; else if(max1==1&&max2==0) //这一步证明三个点都在圆外 { double a1,b1,c1; double s; for(i=0;i<3;i++) { a1=(x[i]-a[0])*(x[i]-a[0])+(y[i]-a[1])*(y[i]-a[1]); <em>//计算点到圆心的距离,三条边构成三角形</em> b1=(x[(i+1)%3]-a[0])*(x[(i+1)%3]-a[0])+(y[(i+1)%3]-a[1])*(y[(i+1)%3]-a[1]); c1=(x[i]-x[(i+1)%3])*(x[i]-x[(i+1)%3])+(y[i]-y[(i+1)%3])*(y[i]-y[(i+1)%3]); if(a1+c1>=b1&&b1+c1>=a1) <strong>//判断是否能构成垂线</strong> { //cout<<a1<<' '<<b1<<' '<<c1<<endl; s=c1*a1-((c1+a1-b1)/2*(c1+a1-b1)/2); //cout<<s<<endl;<strong> //我大中华的秦九韶公式</strong> if(sqrt(s/c1)<=a[2]) z=1; <strong>//找到垂线的长度。</strong> //cout<<i<<" "<<sqrt(s/c1)<<' '<<z<<' '<<a[2]<<' '<<s-a[2]<<endl; } } } if(z) cout<<"Yes"; else cout<<"No"; //cout<<' '<<t; cout<<endl; } return 0; }
相关文章推荐
- PHP 程序员10条最容易犯的错误
- 2016 Personal Training #1 Div.2 D - 1D Cafeteria (B) Gym 100989D
- Hexo高级教程之主题开发
- 如何打包EVENT 和ABAP的变量,对传输管理很严的公司适用
- 设计模式之装饰者模式
- [置顶] SSH权限管理控制到按钮
- php连接数据库
- 群福利:百度云管家-本地SVIP
- swift - UIImageView 的使用
- sql-2-sql的数据类型
- mysql 主从复制详细操作过程
- PHP信号控制,ID生成器应用
- 真理-编程人员要注意的点
- Android保存图片到图库,Android扫描文件到媒体库,Android保存图片到SD卡
- CentOS7安装Docker,运行Nginx镜像、Centos镜像
- 比较ArrayList、LinkedList、Vector
- 简单的 jquery控制表单提交
- javascript DOM 删除元素
- Extjs框架总结
- 《拳皇98终极之战OL》系统分析