program reflective_walls_skip_d_inner_sub4 real*8 x,y real x_inner(5),y_inner(5) real bar_x(5),bar_y(5) real bar_xold(5),bar_yold(5) write(*,*)'Vx?' read(*,*)vx write(*,*)'Vy?' read(*,*)vy i_dummy=pgopen('/xwin') xmin=-10 xmax=10 ymin=-10 ymax=10 r=0.2 wdth=(1+0.1)*r call pgenv(xmin-wdth,xmax+wdth,ymin-wdth,ymax+wdth,1,-1) call pgsfs(2) xc=(x_min+x_max)/2;thickness=2.0 yc=(y_min+y_max)/2;hight=4.0 x_inner_min=xc-0.5*thickness;x_inner_max=xc+0.5*thickness y_inner_min=yc-0.5*hight;y_inner_max=yc+0.5*hight x_inner(1)=x_inner_min+wdth;y_inner(1)=y_inner_max-wdth x_inner(2)=x_inner_max-wdth;y_inner(2)=y_inner_max-wdth x_inner(3)=x_inner_max-wdth;y_inner(3)=y_inner_min+wdth x_inner(4)=x_inner_min+wdth;y_inner(4)=y_inner_min+wdth x_inner(5)=x_inner(1);y_inner(5)=y_inner(1) x=1 y=1 xold=real(x) yold=real(y) dt=0.00001 n_sig_read = 10 n_draw = 100 do i=1,1000000000 if(x>xmax) vx=(-1)*vx if(x<xmin) vx=(-1)*vx if(y>ymax) vy=(-1)*vy if(y<ymin) vy=(-1)*vy if( mod(i,n_sig_read)==0 )then open(unit=10,file='signal.txt',status='old') read(10,*)sig close(10) xl=x_inner_min;xr=x_inner_max call draw_bouncer_bar(sig,xl,xr,wdth,bar_x,bar_y,bar_xold, & bar_yold,y_inner_min,y_inner_max) end if call check_bounce(sig,x,y,vx,vy,x_inner_min,x_inner_max, &y_inner_min,y_inner_max) x=x+vx*dt y=y+vy*dt if(mod(i,n_draw)==0)then call pgbbuf call pgsci(0) call pgcirc(xold,yold,r) call pgsci(1) call pgcirc(real(x),real(y),r) call pgebuf xold=real(x) yold=real(y) end if end do call pgclos end subroutine check_bounce(sig,x,y,vx,vy,x_inner_min,x_inner_max, &y_inner_min,y_inner_max) real*8 x,y y_top=2*sig-10+y_inner_max;y_bot=2*sig-10+y_inner_min if( (y>y_bot) .and. (y<y_top) ) then if( (x>x_inner_min) .and. (x<x_inner_min+0.1) ) then vx=(-1)*vx goto 200 endif if( (x<x_inner_max) .and. (x>x_inner_man-0.1) ) then vx=(-1)*vx goto 200 endif end if if( (x>x_inner_min) .and. (x<x_inner_max) ) then if( (y>y_bot) .and. (y<y_bot+0.1) ) then vy=(-1)*vy goto 200 endif if( (y<y_top) .and. (y>y_top-0.1) ) then vy=(-1)*vy goto 200 endif end if 200 continue end subroutine draw_bouncer_bar(sig,xl,xr,wdth,bar_x,bar_y, &bar_xold,bar_yold,y_inner_min,y_inner_max) real bar_x(5),bar_y(5) real bar_xold(5),bar_yold(5) y_top=2*sig-10+y_inner_max;y_bot=2*sig-10+y_inner_min bar_x(1)=xl+wdth;bar_y(1)=y_top-wdth bar_x(2)=xr-wdth;bar_y(2)=y_top-wdth bar_x(3)=xr-wdth;bar_y(3)=y_bot+wdth bar_x(4)=xl+wdth;bar_y(4)=y_bot+wdth bar_x(5)=bar_x(1);bar_y(5)=bar_y(1) call pgbbuf call pgsci(0) call pgline(5,bar_xold,bar_yold) call pgsci(1) call pgline(5,bar_x,bar_y) call pgebuf do i=1,5 bar_xold(i)=bar_x(i);bar_yold(i)=bar_y(i) end do end