Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
怎么就WA了...是精度问题还是什么-___________________________-#include <iostream> #include <math.h> using namespace std; const double pi = 3.141592654; struct circle { double x,y; double r,intersection_area,intersection_radio; bool check_intersection(const circle&a) const { if((x-a.x)*(x-a.x)+(y-a.y)*(y-a.y)>=(r+a.r)*(r+a.r)) return false; return true; } bool check_is_inside(const circle&a) { return sqrt((x-a.x)*(x-a.x)+(y-a.y)*(y-a.y))+a.r<=r; } void get_intersection_radio(const circle&a) { double dis=(x-a.x)*(x-a.x)+(y-a.y)*(y-a.y); intersection_radio= 2*(acos(0.5*(r*r+dis-a.r*a.r)/(r*sqrt(dis)))); } void get_intersection_area() { intersection_area=intersection_radio*r*r*0.5-r*r*sin(intersection_radio)*0.5; } }a,b; int main() { double res; while(cin>>a.x>>a.y>>a.r>>b.x>>b.y>>b.r) { if(!a.check_intersection(b)) cout<<"0.000"<<endl; else { if(a.check_is_inside(b)) { printf("%.3lf\n",pi*a.r*a.r); continue; } if(b.check_is_inside(a)) { printf("%.3lf\n",pi*b.r*b.r); continue; } a.get_intersection_radio(b); a.get_intersection_area(); res=a.intersection_area; b.get_intersection_radio(a); b.get_intersection_area(); res+=b.intersection_area; printf("%.3lf\n",res); } } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator