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;
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值