FZU 2099 魔法阵(数学题)

魔法阵

Description

两个正三角形和一个圆组成一个魔法阵,如图,圆心和正三角形内心重合,三角形的重叠部分是一个正六边形。求魔法阵轮廓围成的面积。

FZU 2099 魔法阵(数学题)_第1张图片

Input

第一行一个整数T表示数据组数(T<=1000)。接下来T行每行2个实数,正三角形边长L和圆的半径R(0

Output

对于每组数据输出一个实数,魔法阵轮廓围成的面积,保留2位小数。

Sample Input

4
493.5 176.4
741.7 374.0
100.0 1.0
1.0 100.0

Sample Output

141994.02
449787.96
5773.50
31415.93

Hint

魔法阵轮廓可能退化成一个圆或者一个六芒星。
 
代码如下:
View Code
 1 #include
 2 #include
 3 double pi=acos(-1.0);
 4 const double k=sqrt(3.0);
 5 int main()
 6 {
 7     int cas;
 8     double L,R;
 9     scanf("%d",&cas);
10     while(cas--)
11     {
12         scanf("%lf %lf",&L,&R);
13     
14         double t=L*k/3.0;
15         if(t<=R) printf("%.2lf\n",pi*R*R);
16         else if(L/3.0>=R) 
17         {
18             double s=k/4.0*L*L;
19             s=s*4/3.0;
20             printf("%.2lf\n",s);
21         }
22         else
23         {
24             double b=t;
25             double san=4*R*R-b*b;
26             san=sqrt(san);
27             double x;
28             x=(k*b-san)/2.0;
29             double s1=x*b/4.0;
30             t=x/(2.0*R);
31             t=asin(t);
32             double s2=pi*R*R*t/(2*pi);
33             double s=(s1-s2)*12+pi*R*R;
34             printf("%.2lf\n",s);
35         }
36     }
37     return 0;
38 }

 

你可能感兴趣的:(FZU 2099 魔法阵(数学题))