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 利用叉积求多边形面 ...
随机推荐
- orzdba_monitor.sh和orzdba
1.脚本 #!/bin/bash # line: V1.0 # mail: gczheng@139.com # data: 2018-04-23 # script_name: orzdba_monit ...
- 0908期 HTML form表单
表单基础摘要 <form id="" name="" method="post/get" action="负责处理的服务端& ...
- form中input是类型有哪些?
text:文本框 password:密框码 radio:单选按钮 checkbox:复选框 file:文件选择域 hidden:隐藏域 button:按钮 reset:重置按钮 submit:表单提交 ...
- [Python] IMG to Char
Change image into character from PIL import Image import argparse #输入 #命令行输入参数处理 parser = argparse.A ...
- 证件照制作:使用PS打印一寸照片
1. 打开文件,文件-打开-选择要操作的图片: 2. 修改图片尺寸,图像-图像大小,弹出对话框后,设置 宽度:2.5cm,高度:3.5cm,分辨率:300 像素/英寸: 3. 为要打印的照片设置白边, ...
- 咱妈说别乱点链接之浅谈CSRF攻击
平时经常听到人们说别乱点链接,小心有病毒.还有长辈们转发的“天呐~XXX的阴谋,全是病毒”.“XXX惊天大病毒,点了苹果手机就要爆炸!”.“现在转发热门连接会乱扣费!千万别点!”. 到底长辈们说的这些 ...
- ror笔记2
在rails app的 config 文件夹中新建unicorn.rb内容如下 worker_processes 2 working_directory "/home/mage/boleht ...
- 转 查看linux文件目录的大小和文件夹包含的文件数
du -sh 文件夹路径 查看linux文件目录的大小和文件夹包含的文件数 统计总数大小 du -sh xmldb/ du -sm * | sort -n //统计当前目录大小 并安大小 排序 du ...
- Spring、Springboot常用注解:@Qualifier(不定时更新)
1.@Qualifier 出现场景: 老项目中有多个实现类实现同一个接口时,或者一个项目中有多个数据源时,spring容器不知道该注入哪个实现类或者使用哪个数据源,该注解就派上用场. 1)多实现类实现 ...
- Elasticsearch-PHP 快速开始
快速开始 本章节会给你一个客户端的主要功能(函数)是如何工作的快速概述. 安装 引入(包含)elasticsearch-php 在你的 composer.json 文件: { "requir ...