/* Helper function */ double calcQuadA(double px0,double py0,double pz0,double px1,double py1,double pz1) { double dx=px1-px0; double dy=py1-py0; double dz=pz1-pz0; return dx*dx+dy*dy+dz*dz; } /* Helper function */ double calcQuadB(double px0,double py0,double pz0,double px1,double py1,double pz1,double cx,double cy,double cz) { double dx1=px1-px0; double dy1=py1-py0; double dz1=pz1-pz0; double dx2=px0-cx; double dy2=py0-cy; double dz2=pz0-cz; return 2*(dx1*dx2+dy1*dy2+dz1*dz2); } /* Helper function */ double calcQuadC(double px0,double py0,double pz0,double cx,double cy,double cz,double radius) { double dx=px0-cx; double dy=py0-cy; double dz=pz0-cz; return dx*dx+dy*dy+dz*dz-radius*radius; } /* Helper function */ double doQuadratic(double a,double b,double c) { double root=b*b-4*a*c; if(root<0) { return -1; } else { return (-b-sqrt(root))/(2*a); } } /* This function takes arguments for a ray and a sphere and returns */ double intersectRayAndSphere(double px0,double py0,double pz0,double px1,double py1,double pz1,double cx,double cy,double cz,double radius) { double a,b,c; a=calcQuadA(px0,py0,pz0,px1,py1,pz1); b=calcQuadB(px0,py0,pz0,px1,py1,pz1,cx,cy,cz); c=calcQuadC(px0,py0,pz0,cx,cy,cz,radius); return doQuadratic(a,b,c); } double intersectRayAndPlane(double px0,double py0,double pz0,double px1,double py1,double pz1,double cx,double cy,double cz,double nx,double ny,double nz) { double dcx=px0-cx; double dcy=py0-cy; double dcz=pz0-cz; double dpx=px1-px0; double dpy=py1-py0; double dpz=pz1-pz0; double numer=dcx*nx+dcy*ny+dcz*nz; double denom=dpx*nx+dpy*ny+dpz*nz; if(denom-numer*1e-8) { return -1; } else { return -numer/denom; } } double calcDistance(double x1,double y1,double z1,double x2,double y2,double z2) { double dx=x1-x2; double dy=y1-y2; double dz=z1-z2; return sqrt(dx*dx+dy*dy+dz*dz); } int main(void) { double px1,py1,pz1; double cx,cy,cz; double radius; double nx,ny,nz; double iVal; int size; char style; int i,j; double dist; scanf("%d",&size); printf("%d %d\n",size,size); scanf(" %c",&style); if(style=='s') { scanf("%lf %lf %lf %lf",&cx,&cy,&cz,&radius); } else { scanf("%lf %lf %lf %lf %lf %lf",&cx,&cy,&cz,&nx,&ny,&nz); } for(i=0; i