(点到线段的最短距离)51nod1298 圆与三角形
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
- 思路:这个题是要分类讨论,先判断三角形的三个顶点的位置,如果三个顶点都在圆内,那么三角形一定与圆不想交,如果三个顶点都在圆外,那这个需要看情况讨论,详情见往后,其他的都可以认为与圆相交。
在三个顶点都在圆外的情况上,可以通过圆心到三角形的三个边的距离来判断,如果其中一个距离小于圆的半径,那么可以认为三角形与圆相交。
其中,需要注意的是:
这个距离是指的是点到线段的距离,而不是点到直线的距离!!!!!!
- 关于点到线段距离的参考链接:https://blog.csdn.net/betwater/article/details/52434017
- C++代码:
- #include<iostream>
- #include<cstdio>
- #include<cmath>
- using namespace std;
- struct Triangle{
- double x,y;
- }tri[];
- double dis(double cx,double cy,Triangle a,Triangle b){
- double k1 = (a.x - cx)*(a.x - b.x) + (a.y - cy)*(a.y - b.y);
- if(k1 <= ){
- return sqrt((a.x - cx)*(a.x - cx) + (a.y - cy)*(a.y - cy));
- }
- double k2 = (a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y);
- if(k1 >= k2){
- return sqrt((b.x - cx)*(b.x - cx) + (b.y - cy)*(b.y - cy));
- }
- double r = k1/k2;
- double px = a.x + (b.x - a.x)*r;
- double py = a.y + (b.y - a.y)*r;
- return sqrt((cx - px)*(cx - px) + (cy - py)*(cy - py));
- }
- bool rr(double cx,double cy,double r,Triangle a,Triangle b){
- double t = dis(cx,cy,a,b);
- if(t <= r){
- return true;
- }
- else{
- return false;
- }
- }
- bool cmp(double cx,double cy,double r,Triangle a,Triangle b,Triangle c){
- double k1 = (a.x - cx)*(a.x - cx) + (a.y - cy)*(a.y - cy) - r*r;
- double k2 = (b.x - cx)*(b.x - cx) + (b.y - cy)*(b.y - cy) - r*r;
- double k3 = (c.x - cx)*(c.x - cx) + (c.y - cy)*(c.y - cy) - r*r;
- if(k1< && k2< && k3<)
- return false;
- else if(k1> && k2> && k3>){
- if(rr(cx,cy,r,a,b) || rr(cx,cy,r,a,c) || rr(cx,cy,r,b,c)){
- return true;
- }
- else{
- return false;
- }
- }
- else
- return true;
- }
- int main(){
- int T;
- scanf("%d",&T);
- double cx,cy,r;
- while(T--){
- cin>>cx>>cy>>r;
- for(int i = ; i < ; i++){
- cin>>tri[i].x>>tri[i].y;
- }
- if(cmp(cx,cy,r,tri[],tri[],tri[])){
- printf("Yes\n");
- }
- else
- printf("No\n");
- }
- return ;
- }
(点到线段的最短距离)51nod1298 圆与三角形的更多相关文章
- 51nod1298圆与三角形——(二分法)
1298 圆与三角形 题目来源: HackerRank 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出圆的圆心和半径,以及三角形的三个顶点,问圆同 ...
- 51nod-1298 圆与三角形(计算几何超详解)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1298 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是 ...
- 51nod1298 圆与三角形
1298 圆与三角形 题目来源: HackerRank 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三 ...
- 51nod 1298 圆与三角形
给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0). 输入 第1行:一个数 ...
- (图论)51NOD 1298 圆与三角形
给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0). 输入 第1行:一个数T, ...
- 51nod 1298 圆与三角形 (计算几何)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1298 求出圆心到三条线段的最短距离,然后判断是否有顶点在圆外,就把全部情 ...
- 51nod_1298:圆与三角形(计算几何)
题目链接 判断圆和三角形是否相交 可以转化为 判断三条线段是否和圆相交 #include<iostream> #include<cstdio> #include< ...
- 51Nod 1298 圆与三角形(计算几何)
1298 圆与三角形 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes&quo ...
- POJ - 1584 A Round Peg in a Ground Hole(判断凸多边形,点到线段距离,点在多边形内)
http://poj.org/problem?id=1584 题意 按照顺时针或逆时针方向输入一个n边形的顶点坐标集,先判断这个n边形是否为凸包. 再给定一个圆形(圆心坐标和半径),判断这个圆是否完全 ...
随机推荐
- HTML中文本过长时自动隐藏末尾部分或中间等任意部分
一. 一般情况下,HTML字符串过长时都会将超过的部分隐藏点,方法如下: 设置CSS: .ellipsis-type{ max-width: 50px; ...
- Opencv画图操作
1. 画矩形 MyRect rect;rect.left = 5;rect.top = 5;rect.right = 100;rect.bottom = 100;IplImage * pColorIm ...
- poj2186(tarjan缩点)
题意:有n头奶牛,假如奶牛A觉得奶牛B很厉害,那么就有一条由A指向B的边,然后有个传递关系,if(A→B,B→C,那么A→C),让你求出被除了自己以外所有的奶牛都认为厉害的的奶牛个数: 解题思路:看到 ...
- Nginx+Tomcat 负载均衡集群
案例分析 通常情况下,一台Tomcat站点由于可能出现单点故障及无法应对多客户复杂多样性的请求等问题,不能单独应用于生产环境下,所以我们需要一套更可靠的解决方案来完善Web站点架构. Nginx是一款 ...
- anaconda4.2.0
上改完cv2那个文件夹后,发现在使用导入的cv2中的方法时没有代码提示,于是搞啊搞,终于让我搞坏了mmp,这也太脆弱了. 无奈组装了一个全新的方法 过程比较坎坷也就没怎么记录 我的版本是选择最后一个o ...
- Linux iptables设置
先举例子说明,若服务器网卡: eth0 10.10.0.100 eth0:0 10.10.0.200 eth0:1 10.10.0.201 eth0:2 10.10.0.202 只允许10.10.0. ...
- hdu5017 Ellipsoid (模拟退火)
Ellipsoid 原题链接 题目描述 给定.一个要满足的椭球的方程\(ax^2+by^2+cz^2+dyz+exz+fxy=1\) 求球面上一个点到原点\((0,0,0)\)的距离最小. 有多组输入 ...
- Java和操作系统交互细节
结合 CPU 理解一行 Java 代码是怎么执行的 根据冯·诺依曼思想,计算机采用二进制作为数制基础,必须包含:运算器.控制器.存储设备,以及输入输出设备,如下图所示. enter image des ...
- Hdoj 2108.Shape of HDU 题解
Problem Description 话说上回讲到海东集团推选老总的事情,最终的结果是XHD以微弱优势当选,从此以后,"徐队"的称呼逐渐被"徐总"所取代,海东 ...
- python3 hashlib模块
hashlib是一个加密模块,可以将明文加密为密文: md5,sha加密:过程不可逆转.