program linear_motion 1001 write(*,*)'x?' read(*,*)x write(*,*)'y?' read(*,*)y write(*,*)'Vx?' read(*,*)vx write(*,*)'Vy?' read(*,*)vy x_min=0.0 x_max=10.0 y_min=0.0 y_max=10.0 r=0.1 if(pgopen('/xwin')<=0)stop call pgenv(x_min,x_max,y_min,y_max,1,0) dt=0.00001 do i=1,1000000 x = x + vx*dt y = y + vy*dt call pbc(x,y,x_min,x_max,y_min,y_max) c call box(x,y,vx,vy,x_min,x_max,y_min,y_max) call pgbbuf call pgsci(0) call pgcirc(xold,yold,r) call pgsci(1) call pgcirc(x,y,r) call pgebuf xold=x yold=y end do 1002 write(*,*)'Again?(1=yes,0=no)' read(*,*)j if(j==0)stop if(j==1)goto 1001 goto 1002 end subroutine box(x,y,vx,vy,x_min,x_max,y_min,y_max) c if(x>x_max)vx=(-1)*vx c if(xx_max))vx=(-1)*vx c if(yy_max)vy=(-1)*vy if((yy_max))vy=(-1)*vy end subroutine pbc(x,y,x_min,x_max,y_min,y_max) if(xx_max) x = x - (x_max-x_min) if(yy_max) y = y - (y_max-y_min) end