首页 > 代码库 > poj 2546 Circular Area 两圆面积交
poj 2546 Circular Area 两圆面积交
题意:
给两个圆,求它们的面积交。
分析:
海伦公式,余弦定理等可解。
代码:
//poj 2546 //sep9 #include <iostream> #include <cmath> using namespace std; const double pi=acos(-1.0); int main() { double x1,y1,r1,x2,y2,r2; scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&r1,&x2,&y2,&r2); double d=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); if(d>=r1+r2){ printf("%.3lf",0); return 0; } if(d<=max(r1,r2)-min(r1,r2)){ printf("%.3lf",pi*min(r1,r2)*min(r1,r2)); return 0; } double p=(r1+r2+d)/2; double s=2*sqrt(p*(p-r1)*(p-r2)*(p-d)); double A1=2*acos((r1*r1+d*d-r2*r2)/(2*r1*d)); double A2=2*acos((r2*r2+d*d-r1*r1)/(2*r2*d)); double s1=A1*r1*r1/2; double s2=A2*r2*r2/2; printf("%.3lf",s1+s2-s+1e-9); return 0; }
poj 2546 Circular Area 两圆面积交
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。