【OJ】两个圆
创始人
2024-05-26 04:43:07
0

在这里插入图片描述


📚Description:

直角坐标系内现有两个半径相等的圆,问两圆的位置关系。

位置关系有:重合,相切,相离,相交;

若两圆相交,需要求出两圆的重叠面积。


Input:

输入包含多组数据,每组数据为一行,包括5个实数x1,y1,x2,y2,r,分别代表第一个圆圆心的横纵坐标,第二个圆圆心的横纵坐标以及它们的半径,-20 < x1,y1,x2,y2,r < 20。


🔑Output:

对于每组数据,输出占一行,位置关系有:重合,相切,相离,相交,若两圆相交,则继续输出一个空格,再输出两圆的重叠面积,面积保留2位小数;


👨‍🏫 Sample Input:
0 0 0 0 1
0 0 1 0 0.5
0 0 1 0 0.3
0 0 1 0 1

💡Sample Output:
重合
相切
相离
相交 1.23


🚗🚗🚗🚗🚗🚗🚗🚗🚗🚗

🙋‍思路

本题关键在于两个圆心距离和半径的对比
本题设置了两个半径相同的圆
简化了一定的难度
通过比较半径和圆心距离可以直接划分出四种状态
其中相交状态下需要计算面积

重叠面积具体介绍如下:

在这里插入图片描述
假设是半径为r的两个圆相交
因为半径相等,所以从各种情况都可以视为O1和O2在同一水平线上(为了方便计算)
且O1AO2B一定是一个菱形

接下来就是面积的计算
重叠的面积其实就是两个扇形面积减去菱形面积
在这里插入图片描述
📢📢📢 注意C语言中弧度与角度的转换!
📢📢📢 注意C语言中弧度与角度的转换!
📢📢📢 注意C语言中弧度与角度的转换!


AC Code

#include 
#include 
#define PI 3.1415926int main(){double x1,y1,x2,y2,r;double len;   //记录两个圆心的距离 while(scanf("%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&r)!=EOF){float m;   //角度 float s;   //重合面积 len = sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));if(len == 2*r){   //相切 printf("相切\n");}else if(x1==x2 && y1==y2){  //重合 printf("重合\n");}else if(len > 2*r){  //相离 printf("相离\n");}else{    //相交 m = acos(0.5*len/r)*180.0/PI;s = m/90*PI*r*r-r*sin(m*PI/180)*len;printf("相交 %.2lf\n",s);} } 
}

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...