# Filename: A02.1_string_rendering_v1.py
# Written by: James D. Miller
import time
def render_airtrack(x_px, x_left_edge_px, x_right_edge_px):
string = ''
display_width_px = 125
for j in range(0, display_width_px + 1):
if (j == x_px):
string += '*'
elif (j==x_left_edge_px) or (j==x_right_edge_px):
string += '|'
else:
string += ' '
return string
def m_to_px(x_m):
return int(round( x_m * 7.0)) # pixels per meter.
def x_fix_sticky( x_m, x_left_edge_m, x_right_edge_m):
# Simple stickiness correction. Move it back to the surface.
if (x_m < x_left_edge_m):
x_corrected_m = x_left_edge_m
elif (x_m > x_right_edge_m):
x_corrected_m = x_right_edge_m
return x_corrected_m
def main():
x_left_edge_m = 1.5
x_right_edge_m = 17.5
dt_s = 0.015
x_m = 11.0
v_mps = 17.0
a_mps2 = -2.0
for j in range(5000):
try:
# Update the velocity and position.
v_mps += a_mps2 * dt_s
x_m += v_mps * dt_s
# Check for wall collisions.
if (x_m < x_left_edge_m) or (x_m > x_right_edge_m):
v_mps *= -1 * 0.80 # loss of 20% on each bounce.
x_m = x_fix_sticky( x_m, x_left_edge_m, x_right_edge_m)
display_string = render_airtrack( m_to_px( x_m), m_to_px( x_left_edge_m), m_to_px( x_right_edge_m))
print display_string + ' x =' + "%.3f" % x_m + " " + ' v = ' + "%.1f" % v_mps
time.sleep(dt_s)
except:
break
main()