HDU 5120 Intersection(2014北京赛区现场赛I题 计算几何)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5120
解题报告:给你两个完全相同的圆环,要你求这两个圆环相交的部分面积是多少?
题意看了好久没懂。圆环由一个大圆里面套一个小圆,中间部分就是圆环,两圆环相交面积 = 大圆相交的面积 - 2*大圆与小圆相交的面积 + 小圆与小圆相交的面积。
也就是说,这题就可以化为求两个圆的相交的面积了。可以利用两个圆的方程,求出圆的交点所在的直线,然后求出圆心到这条直线的距离,就可以求出两个圆对应的扇形的圆心角是多少了。要注意的地方就是,注意两个圆的位置关系,可能是相交,包含,或者相离,其中相交的情况下,还要注意较小的那个圆的扇形的圆心角是不是钝角,可以通过判断两个圆心的位置是 不是在圆的交点所在直线的同一侧,判断这个可以将两个圆心代入直线方程,乘积小于0,说明这两个点在这条直线的两侧。然后,如果是圆心在交点所在直线的同一侧,那么,求这部分相交的面积的时候,应该用小圆扇形的面积加上那个三角形的面积,否则就是扇形面积减去那个三角形的面积。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
const double PI = acos(-1.0),eps = 1e-;
struct point
{
double x,y;
};
struct circle
{
point c;
double r;
}; circle A,a,B,b;
double dis(point a,point b)
{
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
double dis_line(point p,double a,double b,double c)
{
return(fabs(a*p.x+b*p.y+c)/sqrt(a*a+b*b));
}
double get_in(circle x,circle y) //求两 园交集的面积
{
if(dis(x.c,y.c) < (x.r-y.r) || fabs(dis(x.c,y.c) - (x.r-y.r)) < eps) return PI * y.r*y.r;
if(dis(x.c,y.c) > x.r+y.r || fabs(dis(x.c,y.c)-(x.r+y.r)) < eps) return ;
double a = 2.0 * (x.c.x - y.c.x),b = 2.0 * (x.c.y-y.c.y),c = y.c.x*y.c.x-x.c.x*x.c.x + y.c.y*y.c.y-x.c.y*x.c.y+x.r*x.r-y.r*y.r;
double l1 = dis_line(x.c,a,b,c);
double co1 = acos(l1 / x.r) * 2.0;
double s1 = PI * x.r*x.r*(co1/PI/2.0) - (0.5*x.r*x.r*sin(co1));
double l2 = dis_line(y.c,a,b,c);
double co2 = acos(l2 / y.r) * 2.0,s2;
if((a*x.c.x+b*x.c.y+c) * (a*y.c.x+b*y.c.y+c) <= ) //两圆心在园交点的两侧
s2 = PI * y.r*y.r*(co2 / PI/2.0) - (0.5*y.r*y.r*sin(co2));
else s2 = PI * y.r*y.r*((2.0*PI-co2)/(2.0*PI)) + (0.5*y.r*y.r*sin(co2));
return s1+s2;
} int main()
{
// freopen("in","r",stdin);
int T,kase = ;
scanf("%d",&T);
while(T--)
{
double r1,r2;
scanf("%lf%lf",&r1,&r2);
scanf("%lf%lf",&A.c.x,&A.c.y);
a = A;
scanf("%lf%lf",&B.c.x,&B.c.y);
b = B;
A.r = B.r = r2;
a.r = b.r = r1;
double ans = get_in(A,B);
// printf("%lf\n",get_in(A,B));
ans -= (2.0 * get_in(A,b));
// printf("%lf\n",get_in(A,b));
ans += get_in(a,b);
// printf("%lf\n",get_in(a,b));
printf("Case #%d: %lf\n",kase++,ans+eps);
}
return ;
}
HDU 5120 Intersection(2014北京赛区现场赛I题 计算几何)的更多相关文章
- HDU 5120 A Curious Matt(2014北京赛区现场赛A题 简单模拟)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5112 解题报告:扫一遍 #include<cstdio> #include<cstr ...
- HDU 5128 The E-pang Palace(2014广州赛区现场赛B题 计算几何)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5128 解题报告:在一个平面上给出n个点的坐标,用这n个点作为矩形的四个顶点,作两个矩形,要求两个矩形不 ...
- HDU 5073 Galaxy(2014鞍山赛区现场赛D题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5073 解题报告:在一条直线上有n颗星星,一开始这n颗星星绕着重心转,现在我们可以把其中的任意k颗星星移 ...
- HDU 5071 Chat(2014鞍山赛区现场赛B题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5071 解题报告:一个管理聊天窗口的程序,一共有八种操作,然后要注意的就是Top操作只是把编号为u的窗口 ...
- HDU 5074 Hatsune Miku(2014鞍山赛区现场赛E题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5074 解题报告:给出一个长度为n的序列,例如a1,a2,a3,a4......an,然后这个序列的美丽 ...
- [hdu5113]Black And White2014北京赛区现场赛B题(搜索加剪枝)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Black And White Time Limit: 2000/2000 MS ...
- ACM总结——2017ACM-ICPC北京赛区现场赛总结
现在距离比赛结束已经过了一个多星期了,也是终于有时间写下心得了.回来就是被压着做项目,也是够够的. 这次比赛一样是我和两个学弟(虽然是学弟,但我的实力才是最弱的T_T)一起参加的,成绩的话打铁,算是情 ...
- HDU 4816 Bathysphere (2013长春现场赛D题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4816 2013长春区域赛的D题. 很简单的几何题,就是给了一条折线. 然后一个矩形窗去截取一部分,求最 ...
- 2014年亚洲区域赛北京赛区现场赛A,D,H,I,K题解(hdu5112,5115,5119,5220,5122)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud 下午在HDU上打了一下今年北京区域赛的重现,过了5题,看来单挑只能拿拿铜牌,呜呜. ...
随机推荐
- [转发]黑苹果修改DSDT彻底解决关机不断电和睡眠问题
1. 在 Method (_PTS, 1, NotSerialized)之前添加一个OperationRegion (PMRS, SystemIO, 0x0430, 0×13),如下: Operati ...
- nginx 学习笔记(9) 配置HTTPS服务器--转载
HTTPS服务器优化SSL证书链合并HTTP/HTTPS主机基于名字的HTTPS主机带有多个主机名的SSL证书主机名指示兼容性 配置HTTPS主机,必须在server配置块中打开SSL协议,还需要指定 ...
- mongodb嵌套查询
db.dbModel.find({'Missions.Rewards.PrizeType':21} )
- dig的用法
Dig是linux中的域名解析工具,功能比nslookup强很多,使用也很方便,不用象nslookup总是set不停. Dig是domain information groper的缩写,知道了来源想必 ...
- yourphp点击刷新验证码
加入css <script type="text/javascript" src="./Public/Js/my.js"></script&g ...
- Hibernate整合C3P0实现连接池
Hibernate整合C3P0实现连接池 hibernate中可以使用默认的连接池,无论功能与性能都不如C3PO(网友反映,我没有测试过),C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI ...
- php 利用ffmpeg将amr转MP3
原文地址: http://www.jianshu.com/p/895d5568ce70 http://www.cnblogs.com/wanghetao/p/3386311.html http://w ...
- CSS学习点滴
1.CSS :link 选择器 a:link { background-color:yellow;text-decoration:none } 参考:http://www.w3school.com.c ...
- python 选择排序
选择排序算法的思想,首先第一次先从整个序列中选择最小的数,然后放到第一位,然后再从第二位到最后一位选择出最小的一个数,把这个数放到第二位,然后,再从第三位到最后一位选择其中最小的数放到第三位,这样一直 ...
- NancyFx中使用自带的IOC容器
/// <summary> /// Cors扩展 /// </summary> public static class IPipelinesExtensions { /// & ...