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