FZU 2099 魔法阵(数学题)

本文介绍了一种计算由两个正三角形和一个圆组成的魔法阵轮廓围成的面积的方法。根据三角形边长和圆的半径的不同比例,计算过程分为三种情况。通过数学公式推导,最终实现了对魔法阵轮廓面积的有效计算。
魔法阵

Description

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

Input

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

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<stdio.h>
 2 #include<math.h>
 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 }

 

转载于:https://www.cnblogs.com/acm-bingzi/archive/2013/04/13/3017867.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值