1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| #include <iostream> #include <cstdio> #include <cmath> using namespace std; const double eps=1e-8; int main(){ double x,y,z,bx,by,bz,r,vx,vy,vz,t; cin>>x>>y>>z>>bx>>by>>bz>>r>>vx>>vy>>vz>>t; x-=r,y-=r,z-=r; double dx,dy,dz,tx,ty,tz,tt; while(1){ dx=(vx>0)?(x-bx):(bx-r); dy=(vy>0)?(y-by):(by-r); dz=(vz>0)?(z-bz):(bz-r); tx=(dx<eps)?1e9:(dx/fabs(vx)); ty=(dy<eps)?1e9:(dy/fabs(vy)); tz=(dz<eps)?1e9:(dz/fabs(vz)); tt=min(min(tx,ty),tz); if(tt>1e9-1)break; else if(tt>t)break; else{ bx=bx+vx*tt; by=by+vy*tt; bz=bz+vz*tt; if(fabs(tx-tt)<eps){ vx=-vx; } if(fabs(ty-tt)<eps){ vy=-vy; } if(fabs(tz-tt)<eps){ vz=-vz; } } t-=tt; } if(t>eps&&tt<1e9-1){ bx=bx+vx*t; by=by+vy*t; bz=bz+vz*t; } printf("%.2lf %.2lf %.2lf\n",bx,by,bz); return 0; }
|