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 利用叉积求多边形面 ...
随机推荐
- 关于Struts2配置文件名修改的问题
突发奇想的想知道Struts2的配置文件名是否可以修改,自己最早使用Struts2的时候,只是单纯的将配置文件命名为“struts.xml”,这是Strut2默认的配置文件名,我一直也没有去修改它的命 ...
- 重置mysql的root用户密码
/etc/rc.d/init.d/mysql status /etc/rc.d/init.d/mysql stop mysqld_safe --skip-grant-tables& mysql ...
- EMQ、Websocket、MQTT
mqtt.fx的安装和使用 https://blog.csdn.net/nicholaszao/article/details/79211965 EMO 使用说明 http://emqtt.com/d ...
- 在 SQL Server 的存储过程中调用 Web 服务
介绍 一个老朋友计划开发一个应用,基于 .NET 和 Socket,但需要在存储过程中调用 Web 服务. 在这篇文章中我们将分享这个应用的经验,讲述如何在存储过程中调用 Web 服务,并传递参数. ...
- 【MATLAB】读取和写入文本文件
在MATLAB中,来读取和写入文本文件是很简单的事.下面,就来简单介绍下.如果有其他问题,请留言. 一.读取文本文件 思路: 1.用fopen来打开一个文件句柄 2.用fgetl来获得文件中的一行,如 ...
- HTML 空白
HTML <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- onload函数和自执行函数的区别(jquery API网址:http://jquery.cuishifeng.cn/)
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- bugfree调试
最近项目用到bugfree ,一直不能用,原来是session目录的文件权限有问题.
- Vertex Lit
[Vertex Lit] Vertex Lit path generally renders each object in one pass, with lighting from all light ...
- java基于feemarker 生成word文档(超级简单)
问题由来: 开发个新需求,需要按规定导出word文档,文档截图如下 因为之前没做过这个,一脸懵B啊,导出excel和txt倒是经常接触到,对于这个word这种格式不严谨的文件怎么处理呢? 技术选型:可 ...