hdu 5120 Intersection(求相交圆的面积)
2016-10-17 19:28
363 查看
画画图发现,两个相同的环重合部分的面积就是A大圆和B大圆相交的面积,减去A大圆和B小圆,减去A小圆和B大圆的面积,再加上两个小圆相交的面积,直接套,两圆相交的面积模板
S = A大B大 - A大B小 - A小B大 + A小B小。
#include <iostream> #include <cstdio> #include <cmath> #include <algorithm> using namespace std; double S1,S2,S3,a1,a2,d,p,ans,mi; int x1,yy,x2,y2; struct circle { double x,y,r; }; double area(int rrr,int RRR)//两圆相交的面积 { circle a,b; a.x=x1; a.y=yy; b.x=x2; b.y=y2; a.r=rrr; b.r=RRR; d=(double)sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)); mi=min(a.r,b.r); if(d>a.r+b.r||d==a.r+b.r) ans=0.0; else if(d<abs(a.r-b.r)||d==abs(a.r-b.r)) ans=acos(-1.0)*mi*mi; else { p=(a.r+b.r+d)/2.0; a1=acos((a.r*a.r+d*d-b.r*b.r)/(2.0*a.r*d)); a2=acos((b.r*b.r+d*d-a.r*a.r)/(2.0*b.r*d)); S1=a1*a.r*a.r; S2=a2*b.r*b.r; S3=2*sqrt(p*(p-a.r)*(p-b.r)*(p-d)); ans=S1+S2-S3; } return ans; } int main() { int casen; cin>>casen; for(int tt=1;tt<=casen;tt++) { int rr,RR; cin>>rr>>RR; cin>>x1>>yy>>x2>>y2; double BB=area(RR,RR); double Bb=area(RR,rr); double bB=area(rr,RR); double bb=area(rr,rr); double Ans=BB-Bb-bB+bb; printf("Case #%d: %.6lf\n",tt,Ans); } return 0; }
相关文章推荐
- hdu 5120 Intersection(求相交圆的面积)
- HDU-5120-Intersection【几何-相交圆面积】
- hdu 5120 Intersection (圆相交面积模板)
- hdu 5120 Intersection(两圆相交面积)(模板)
- hdu 5120 Intersection(求相交环面积)
- Hdu 5120 Intersection【计算圆环相交面积】
- HDU 5120 Intersection 求两圆相交面积模板
- hdu 5120 Intersection (容斥原理+圆的相交面积模板)
- HDU 5120 Intersection 圆相交面积
- HDU 5120 Intersection——两圆面积并
- HUD Intersection 5120(两圆环相交求相交面积)
- hdu 5120 Intersection 两环面积交
- hdu 5120 圆相交面积+组合数学
- hdu 5120 Intersection 圆环面积交
- hdoj 5120 Intersection 【计算圆环相交面积】
- HDOJ 5120 Intersection(求两圆相交面积)
- hdu 5120 Intersection 两个圆的面积交
- hdu 5120 Intersection (圆面积交)
- hdu 5120(求两个圆环相交的面积 2014北京现场赛 I题)
- hdu 5120(容斥+圆相交部分面积)