51Nod-1298 圆与三角形

news/2024/7/8 12:43:53

1298 圆与三角形
题目来源: 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>
using namespace std;
struct Point  {
int x,y;
};
int is_inside(struct Point p1,struct Point o,double r)//判断点与圆的位置关系
{
    double dist1,dist2;
    dist1=(p1.x-o.x)*(p1.x-o.x)+(p1.y-o.y)*(p1.y-o.y);
    if (dist1>r*r) return -1;//点在圆外
    else if (dist1==r*r) return 0;//点在圆上
    else return 1;//点在圆内
}
int is_intersect(struct Point p1,struct  Point p2,struct Point o,double r)//判断线段是否与圆有交点
{
    if (is_inside(p1,o,r)+is_inside(p2,o,r)==-2)//如果两点都在圆外
    {
        double a,b,c,dist1,dist2,angle1,angle2;
        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-p2.x*p1.y;
        }
        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;
    }
    else if (is_inside(p1,o,r)+is_inside(p2,o,r)!=2)//一点在圆外或上,一点在圆内或上
        return 1;
    else return 0;//两点都在圆内

}
int main()
{
    int n;
    double r;
    Point o,a,b,c;
    cin>>n;
    while(n--)
    {
        cin>>o.x>>o.y>>r;
        cin>>a.x>>a.y;
        cin>>b.x>>b.y;
        cin>>c.x>>c.y;
        if( is_intersect(a,b,o,r)||is_intersect(a,c,o,r)||is_intersect(b,c,o,r))
            cout<<"Yes"<<endl;
        else
            cout<<"No"<<endl;
    }
    return 0;
}

http://www.niftyadmin.cn/n/980138.html

相关文章

mnist手写数字识别记录-使用keras分类

文章目录1、mnist介绍1、可视化2、各层介绍2、训练过程1、获取图像信息2.具体训练3、测试及反馈本文是我b站上看的一个大佬讲的视频&#xff0c;讲的还是很通俗的&#xff0c;后面又自己查了点资料&#xff0c;加上了自己的一点理解而来的&#xff0c;仅代表本菜鸡理解&#xf…

堡垒机工作机制

网络***&#xff1a;之前介绍过、AAA采用C/S结构&#xff0c;AAA服务器上集中管理用户信息用户想访问网络资源&#xff0c;从而和网关建立连接&#xff0c;网关把用户的认证、授权、计费信息透传给radius服务器审计计费堡垒主机采用AAAA技术&#xff0c;为用户提供安全管理平台…

水比赛系列-HMI串口屏的使用

文章目录1、HMI串口屏介绍1、选型介绍2、开发工具3、新建工程2、HMI串口屏常用控件1、字库图片2、页面切换3、字符最大长度4、全局还是私有5、亮度调节和波特率6、变量7、定时器8、初始化事件3、串口屏数据交互1、串口发送数据2、模拟器仿真3、发送指令改变控件的值4、源码感觉…

1213: [视频]【计算几何】面积

1213: [视频]【计算几何】面积 时间限制: 1 Sec 内存限制: 128 MB 提交: 65 解决: 53 [提交][状态][讨论版] 题目描述 【题意】 在一个平面坐标系上随意画一条有n个点的封闭折线&#xff08;按画线的顺序给出点的坐标&#xff09;&#xff0c;保证封闭折线的任意两条边都…

stm32-USB使用记录(一)

文章目录1、USB设备介绍2、虚拟串口进行数据收发1、在stm32F1上进行2、在stm32F4上进行3、大容量设备访问内部flash1、USB设备介绍 USB&#xff0c;即为通用串行总线&#xff0c;是一个外部总线标准&#xff0c;用于规范电脑与外部设备的连接和通讯。是应用在PC领域的接口技术…

1212: [视频]【计算几何】判断线段相交(跨立实验)

1212: [视频]【计算几何】判断线段相交&#xff08;跨立实验&#xff09; 时间限制: 1 Sec 内存限制: 128 MB 提交: 122 解决: 60 [提交][状态][讨论版] 题目描述 【题意】 有n条线段&#xff08;编号为1~n&#xff09;&#xff0c;按1~n的顺序放在二维坐标系上&#xff…

zTree实现单独选中根节点中第一个节点

zTree实现单独选中根节点中第一个节点 1、实现源代码 <!DOCTYPE html> <html> <head><title>zTree实现基本树</title><meta http-equiv"content-type" content"text/html; charsetUTF-8"><link rel"styleshee…

stm32-USB使用记录(二)

文章目录1、使用外挂FLASH芯片模拟U盘2、使用sd卡模拟U盘前面的笔记中已经提到了就是可以通过STM32的USB外设来完成虚拟串口&#xff08;CDC&#xff09;还有大容量储存设备&#xff08;MSB&#xff09;的功能&#xff0c;但是对于单片机而言&#xff0c;内部的flsh总是不够的&…