现在的位置: 首页 > 综合 > 正文

timus 1084. Goat in the Garden URAL 解题报告 计算几何

2013年12月07日 ⁄ 综合 ⁄ 共 858字 ⁄ 字号 评论关闭

timus  1084. Goat in the Garden   URAL 解题报告   计算几何

一个正方形的操场里面有一个stake,上面有一根绳子拴着一直羊,这个stake在操场的正中间,问羊能吃到的草的面积!
分三种情况讨论,绳子组成的圆把正方形套了,或者正方形把圆套了,或者圆被正方形分割了……
本来以为很难,其实仔细分析下也没那么难,自己以为难是因为这种好像不好AC,因为有时候精度卡的太烦人了……
但是这个题貌似double没那么坑人,所以想明白之后一下子就AC了
关于圆形被正方形分割的情况,:
///圆形面积减去四块或者8小块弓形的面积,弓形的面积是扇形的面积减去三角形的面积,
    ///用到acos,勾股定理而已……  很简单的初中数学题,但是一直怕卡精度没敢做……


#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<map>
#include<cstdio>
#include<math.h>
#define EPS 1e-7
using namespace std;
const double pi=acos(-1.0);
double c,r;

double slove()
{///圆形面积减去四块或者8小块弓形的面积,弓形的面积是扇形的面积减去三角形的面积,
    ///用到acos,勾股定理而已……  很简单的初中数学题,但是一直怕卡精度没敢做……
    return r*r*pi-8*(acos(c/(2*r))/(2*pi)*r*r*pi-sqrt((r*r-pow((c/2),2)))*(c/4));
}
int main()
{
    cin>>c>>r;
    if(c>=2*r)
    {
        printf("%.3f\n",r*r*pi+EPS);
    }else if(c*c<=2*r*r)
        printf("%.3f\n",c*c+EPS);
    else
    {
        printf("%.3f\n",slove()+EPS);

    }
}

timus  1084. Goat in the Garden   URAL 解题报告   计算几何


抱歉!评论已关闭.