ural 1084 Goat in the Garden

 題目地址:http://acm.timus.ru/problem.aspx?space=1&num=1084

其實就是求圓與正方形相交的面積。圓心在正方形的中心。

分三種情況。

(1)正方形完全包含圓

(2)圓完全包含正方形

(3)圓與正方形相交,見下圖。

在三角形OAF中很容易由正弦定理求出角AOF的大小,從而求出角EOF的大小

那麼扇形OEF的面積也就出來了 1/2*(角EOF)*r*r.

三角形OFD的面積也可以很容易求出來。

 

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <vector>
using namespace std;
const double pi = acos(-1.0);

int main()
{
    double a,r;
	while(scanf("%lf %lf",&a,&r)!=EOF)
	{
       if(2*r<=a)      //正方形包含圓
	   {
		   printf("%.3f\n",pi*r*r);
		   continue;
	   }
	   if(a*a<=2*r*r)  //圓包含正方形
	   {
		   printf("%.3f\n",a*a);
		   continue;
	   }
	   //正方形與圓相交
	   double sum=0;
	   double m = sqrt(r*r-a*a/4);
       double b = 2*asin((0.5*a-m)*(0.5*a/r)/sqrt(a*a/2)); 
       sum+=0.5*b*r*r*4;
	   sum+=0.5*a/2*2*m*4;
	   printf("%.3f\n",sum);
	}
	return 0;
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章