POJ 2546 Circular Area(两个圆相交的面积)
题意 : 给你两个圆的半径和圆心,让你求两个圆相交的面积大小。
思路 : 分三种情况讨论
- 假设半径小的圆为c1,半径大的圆为c2。
- c1的半径r1,圆心坐标(x1,y1)。c2的半径r2,圆心坐标(x2,y2)。
- d为两圆圆心连线的长度。
- 相交面积为S
- d=sqrt((x1-x2)^2+(y1-y2)^2)
- (1)如果r1+r2<=d
- 那么两圆相离,相交面积S=0
- (2)如果r2-r1>=d
- 那么半径小的圆内含半径大的圆,那么相交面积为小圆的面积S=pi*r1*r1
- (3)既非(1)也非(2)
- 在图上画两个相交圆,结合图像看。
- 那么两圆相交,连接小圆的圆心与两个圆的交点,连接大圆的圆心和两个圆的交点。
- 可以发现形成的图形被两个圆心的连线平分成2个全等三角形。
- 由小圆圆心和交点所连两条线(长度为半径)以及在大圆之内的弧所形成的扇形为S1
- 由大圆圆心和交点所连两条线(长度为半径)以及在小圆之内的弧所形成的扇形为S2
- 由小圆圆心和交点所连两条线以及由大圆圆心和交点所连两条线所形成的四边形的面积为S3
- 可见相交面积S=S1+S2-S3
- 要求出扇形的面积,要知道扇形的圆心角。
- 小圆包含的扇形的圆心角为2*a1(考虑一个三角形)
- a1=acos((r1^2+d^2-r2^2)/(2.0*r1*d)) 余弦定理
- a2=acos((r2^2+d^2-r1^2)/(2.0*r2*d))
- S1=pi*r1*r1*2*a1/(2*pi)=a1*r1*r1
- 同理
- S2=a2*r2*r2
- S3为一个三角形面积的2倍
- S3=2*r1*d*sin(a1)/2=r1*d*sin(a1)
- 则S=a1*r1*r1+a2*r2*r2-r1*d*sin(a1)
#include <cstdio>
#include <cmath>
#include <cstdlib>
#define PI 3.1415926535897932384626433 double insection(double x1,double y1,double x2,double y2,double r1,double r2)
{
double distance=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
//相离
if(r1+r2<distance) return 0.0 ;
//内含
else if(abs(r2-r1) >= distance)
{
if(r2>=r1) return PI*r1*r1;
else return PI*r2*r2;
}
//相交
else
{
double angle1=*acos((r1*r1+distance*distance-r2*r2)//r1/distance);
double angle2=*acos((r2*r2+distance*distance-r1*r1)//r2/distance);
double ans=r1*r1*angle1/+r2*r2*angle2/-r1*r1*sin(angle1)/-r2*r2*sin(angle2)/;
return ans ;
}
return ;
}
int main()
{
double x1,y1,r1,x2,y2,r2 ;
while(~scanf("%lf %lf %lf %lf %lf %lf",&x1,&y1,&r1,&x2,&y2,&r2))
{
double ans = insection(x1,y1,x2,y2,r1,r2) ;
printf("%.3lf\n",ans) ;
}
return ;
}
POJ 2546 Circular Area(两个圆相交的面积)的更多相关文章
- POJ 2546 Circular Area 几何
http://poj.org/problem?id=2546 晚上发现鼠标快不行了了!!!鼠标你肿么了,肿么突然就按键不灵了,哭,谁送我一只呀,奖励我舍友一只.哈哈.开玩笑滴~ 舍友大怒说" ...
- POJ 2546 & ZOJ 1597 Circular Area(求两圆相交的面积 模板)
题目链接: POJ:http://poj.org/problem? id=2546 ZOJ:problemId=597" target="_blank">http: ...
- java求两个圆相交坐标
最近由于项目需要,根据两个圆函数求出相交的坐标.实现代码如下,另感谢两圆求交点算法实现Java代码,虽然他所贡献的代码中存在问题,但仍有借鉴意义. 1.两个圆相交的数学求法 在中学数学中我们知道,一个 ...
- hdu 5120(求两个圆环相交的面积 2014北京现场赛 I题)
两个圆环的内外径相同 给出内外径 和 两个圆心 求两个圆环相交的面积 画下图可以知道 就是两个大圆交-2*小圆与大圆交+2小圆交 Sample Input22 30 00 02 30 05 0 Sam ...
- 求两圆相交部分面积(C++)
已知两圆圆心坐标和半径,求相交部分面积: #include <iostream> using namespace std; #include<cmath> #include&l ...
- 两圆相交求面积 hdu5120
转载 两圆相交分如下集中情况:相离.相切.相交.包含. 设两圆圆心分别是O1和O2,半径分别是r1和r2,设d为两圆心距离.又因为两圆有大有小,我们设较小的圆是O1. 相离相切的面积为零,代码如下: ...
- hdu 5120 (求两圆相交的面积
题意:告诉你两个圆环,求圆环相交的面积. /* gyt Live up to every day */ #include<cstdio> #include<cmath> #in ...
- 牛客网暑期ACM多校训练营(第三场)J 多边形与圆相交的面积
链接:https://www.nowcoder.com/acm/contest/141/J 题目描述 Eddy has graduated from college. Currently, he is ...
- poj 1654:Area 区域 ---- 叉积(求多边形面积)
Area Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 19398 Accepted: 5311 利用叉积求多边形面 ...
随机推荐
- supervisor 管理
Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启.它是通过fork/exec的方式把这些被管理的进程 ...
- Filter command
1. grep egrep fgrep 2. sort sort -d sort -n sort -r sort -f 3. uniq uniq -d uniq -u uniq -c 4. ...
- 第四章 istio快速入门(快速安装)
4.1 环境介绍 K8s 1.9 以上版本. 4.2 快速部署Istio 下载: https://github.com/istio/istio/releases/, 下载 1.1.0-snapsh ...
- ubuntu 固定静态IP
http://jingyan.baidu.com/article/e5c39bf5bbe0e739d7603396.html 路由器每重启一次,IP都会改变,那么实验室的路由器一天要断电好几次,那么每 ...
- C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值
转自goldeneyezhang原文 C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值 C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值总结: 对应某个类的 ...
- 构建一个完整的DNS系统
人心不同 各如其面 如之奈何 如之奈何 ——引子 我们的目标很明了——构建一个具有根的.私有的DNS(Domain Name System). 这里不会陈述太多关于DNS与BIND的基础知识,如果 ...
- 基于 DirectX11 的 MMDViewer 04-渲染目标视图和多视口
上篇文章给出了一个简单并且可以运行的渲染框架,接下来将介绍框架中的渲染管线构成. 1.创建渲染管线 在你创建完一个窗口后,接着便要创建渲染管线,使用的函数是 D3D11CreateDeviceAndS ...
- 运维自动化工具 Cobbler
简介: 关于操作系统安装方面的自动化,早前我们使用 RedHat 推出的 Kickstart 来批量安装操作系统,近年来 RedHat 又推出一个 Cobbler . Cobbler 使用 Pytho ...
- windows下Mysql5.7.10免安装版配置
免安装配置: 在环境变量 Path 中追加 %mysql_home%\bin; 配置mysql目录下的 my-default.ini 文件,在mysql 根目录下新建 data 文件夹 使用管理员权限 ...
- 【算法】2-sat问题【模板】
什么是2-sat问题 有n个布尔型变量xi,另外m个需要满足的条件.每个条件都是“xi为真/假或者xj为真/假”.这句话中的“或者”意味着两个条件中至少有一个正确.2-sat问题的目标是给每个变量赋值 ...