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 "stdio.h" #include "math.h" #include "stdlib.h" #define max(a,b) (((a)>(b))?(a):(b)) struct QJ {double l,r;} qj[520]; struct QJ getqj(double x1,double y1,double x2,double y2,double r){ struct QJ ans; ans.l=x2+y2*tan(atan((x2-x1)/(y1-y2))-asin(r/sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)))); ans.r=x2+y2*tan(atan((x2-x1)/(y1-y2))+asin(r/sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)))); return ans; } int cmp(const void *a,const void *b){ double x1=((struct QJ *)a)->l; double x2=((struct QJ *)b)->l; if(x1-x2<1e-6&&x2-x1<1e-6)return 0; if(x1-x2>0)return 1; if(x2-x1>0)return -1; } int main() { struct QJ q; int n,i,top; double x0,y0,x,y,r; while(scanf("%d",&n)&&n){ scanf("%lf%lf",&x0,&y0); for(i=0;i<n;i++){ scanf("%lf%lf%lf",&x,&y,&r); qj[i]=getqj(x,y,x0,y0,r); } qsort(qj,n,sizeof(qj[0]),cmp); for(q=qj[0],i=1,top=0;i<n;i++){ if(q.r>qj[i].l||((q.r-qj[i].l)<1e-6 &&(qj[i].l-q.r)<1e-6)) q.r=max(qj[i].r,q.r); else{ qj[top++]=q; q=qj[i]; } } qj[top++]=q; for(i=0;i<top;i++) printf("%.2lf %.2lf\n",qj[i].l,qj[i].r);printf("\n"); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator