鏈接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5858
題意:知道正方形邊長,求陰影部分面積
題解:直接求出兩圓相交部分面積。
CODE:
#include <bits/stdc++.h> using namespace std; #define PI acos(-1) #define eps 1e-5 double Area_of_overlap(double d,double r1,double r2) { if(r1 + r2 < d + eps)return 0; if(d < fabs(r1 - r2) + eps) { double r = min(r1,r2); return PI*r*r; } double x = (d*d + r1*r1 - r2*r2)/(2*d); double t1 = acos(x / r1); double t2 = acos((d - x)/r2); return r1*r1*t1 + r2*r2*t2 - d*r1*sin(t1); } int main() { int t; double l; double d; double r1,r2; double ans; double s; scanf("%d",&t); while(t--) { scanf("%lf",&l); d=sqrt(2.0)/2.0*l; r1=l; r2=l/2.0; s=PI*r2*r2; ans=Area_of_overlap(d,r1,r2); ans=2*(s-ans); printf("%.2lf\n",ans); } return 0; }
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。