UVALive 7066 Intersection 求圆环面积并
2015-08-24 19:05
267 查看
稍微分析一下就出来了!就是求两个圆环的面积并!
当两个圆环的圆心的距离d>=2*R, s=0;
d>=2*r时,s=area(R,R)-area(R,r)*2;
d<2*r时,s=area(R,R)-area(R,r)*2+area(r,r);
当两个圆环的圆心的距离d>=2*R, s=0;
d>=2*r时,s=area(R,R)-area(R,r)*2;
d<2*r时,s=area(R,R)-area(R,r)*2+area(r,r);
#include <iostream> #include<stdio.h> #include<cmath> #include<iomanip> #include<algorithm> using namespace std; double area(double x,double y,double r,double xx,double yy,double rr) { double s,t,t1; double d=sqrt((x-xx)*(x-xx)+(y-yy)*(y-yy)); if(d>=r+rr) s=0; else if(d<=fabs(r-rr)) s=min(acos(-1.0)*r*r,acos(-1.0)*rr*rr); else { t=(r*r+d*d-rr*rr)/2.0/d; t1=sqrt(r*r-t*t); s=-d*t1+r*r*acos(t/r)+rr*rr*acos((d-t)/rr); } return s; } int main() { int t,kcase=1; double x1,x2,y1,y2,r1,r2; scanf("%d",&t); while(t--) { scanf("%lf%lf",&r1,&r2); scanf("%lf%lf",&x1,&y1); scanf("%lf%lf",&x2,&y2); double ans; ans=area(x1,y1,r2,x2,y2,r2)+area(x1,y1,r1,x2,y2,r1)-2*area(x1,y1,r1,x2,y2,r2); printf("Case #%d: %.6lf\n",kcase++,ans); } return 0; }
相关文章推荐
- Murano Setup Steps
- 一个小题目
- JavaScript在线文本编辑的实现
- Atlassian JIRA 插件开发(一) — 环境准备
- 软工视频第一章
- 腾讯调酒大师全民农场下载 v1.8.0 安卓版
- C语言测试程序运行时间
- 视图控制
- 工作笔记2
- 深入理解MVC与MVP
- 云时代的分布式数据库:阿里分布式数据库服务DRDS
- UVA 568 - Just the Facts
- IOS UITextView自适应高度
- 总线设备驱动模型——platform篇
- poj2503
- IOS UITextView自适应高度
- CSS 之 光进入光
- 安卓程序国际化,手机屏幕适配器
- 腾讯龙界启示录 v2.1.0 安卓版
- mac 常用 终端命令