#include #include #include #include #include #include #define INPUT "reflect.in" #define EPS .000000001 int n; int es[25][3]; double p[2],v[2]; int nc,le; double pe(double a[2],double b[2]) { return a[0]*b[0]+a[1]*b[1]; } double dist(double a[2],double b[2]) { double dx,dy; dx=a[0]-b[0]; dy=a[1]-b[1]; return sqrt(dx*dx+dy*dy); } double modulo( double x, double y) { return sqrt(x*x+y*y); } void corta(int primero) { double tmp[2]; double s0[2],s1[2],s[2]; double per[2],par[2]; double A,B,C,D,m,b; double d0,d1,d; int i,fst,numsol; fst=1; numsol=-1; d=0; s[0]=0; s[1]=0; for (i=0;iEPS) { m=v[1]/v[0]; b=p[1]-m*p[0]; A=1+m*m; B=2*b*m-2*es[i][0]-2*m*es[i][1]; C=b*b+es[i][0]*es[i][0]+es[i][1]*es[i][1]-2*es[i][1]*b-es[i][2]*es[i][2]; D=B*B-4*A*C; } else { A=1; B=-2*es[i][1]; C=p[0]*p[0]+es[i][0]*es[i][0]-2*p[0]*es[i][0]+es[i][1]*es[i][1]-es[i][2]; } if (D<0) { continue; } s0[0]=(-B+sqrt(B*B-4*A*C))/(2*A); s1[0]=(-B-sqrt(B*B-4*A*C))/(2*A); s0[1]=m*s0[0]+b; s1[1]=m*s1[0]+b; d0=dist(p,s0); d1=dist(p,s1); if (fst) { fst=0; s[0]=s0[0]; s[1]=s0[1]; d=d0; numsol=i; } if (d0