REM fudpb.bas - jackord@kw.igs.net - revised 14 Feb 2011 - BBC Basic 5.92a REM Motion of a ball thrown upward at its terminal velocity (30 m/s) *FLOAT 64 REM Install libraries INSTALL @lib$+"WINLIB5" REM Initialize window WindowWidth=400 REM Pixel Scale 0-400 WindowHeight=300 REM Pixel Scale 0-300 VDU 23,22,WindowWidth;WindowHeight;8,12,16,128 *FONT Arial,10 SYS "SetWindowText", @hwnd%, "Air Resistance" OFF: CLS : VDU 5: GCOL 0: ORIGIN 0, 0 gr=9.8: vt=30: dt=.01 GCOL 9: MOVE 0, 0 t=0: y=0: v=vt: a=-gr REM Without Air Resistance v=v+a*dt/2 WHILE y>=0 t=t+dt: y=y+v*dt: v=v+a*dt DRAW 120*t, 12*y ENDWHILE GCOL 12: MOVE 0, 0 t=0: y=0: v=vt REM With Air Resistance a=-gr*(1+v*ABS(v)/(vt*vt)): dv=a*dt: v=v+dv/2 WHILE y>=0 t=t+dt: y=y+v*dt: u=v+dv/2 a=-gr*(1+u*ABS(u)/(vt*vt)): dv=a*dt: v=v+dv DRAW 120*t, 12*y IF v-dv>0 AND v<=0 THEN h=y ENDWHILE v=v-dv/2-y/v/dt*dv vret=vt/SQR(2) REM Analytic Return Speed ym=vt*vt*LN(2)/2/gr REM Analytic Maximum Height GCOL 0 MOVE 120, 200: PRINT "Maximum height = "; h MOVE 120, 170: PRINT "Analytic ratio = "; h/ym MOVE 120, 110: PRINT "Return speed = "; -v MOVE 120, 80: PRINT "Analytic ratio = "; -v/vret MOVE 0, 0