| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- from pysketcher import *
- R = 1 # radius of wheel
- L = 4 # distance between wheels
- H = 2 # height of vehicle body
- w_1 = 5 # position of front wheel
- xmax = w_1 + 2*L + 3*R
- drawing_tool.set_coordinate_system(xmin=0, xmax=xmax,
- ymin=-1, ymax=2*R + 3*H,
- axis=False)
- wheel1 = Composition({
- 'wheel': Circle(center=(w_1, R), radius=R),
- 'cross': Composition({'cross1': Line((w_1,0), (w_1,2*R)),
- 'cross2': Line((w_1-R,R), (w_1+R,R))})})
- wheel2 = wheel1.copy()
- wheel2.translate((L,0))
- under = Rectangle(lower_left_corner=(w_1-2*R, 2*R),
- width=2*R + L + 2*R, height=H)
- over = Rectangle(lower_left_corner=(w_1, 2*R + H),
- width=2.5*R, height=1.25*H)
- wheels = Composition({'wheel1': wheel1, 'wheel2': wheel2})
- body = Composition({'under': under, 'over': over})
- vehicle = Composition({'wheels': wheels, 'body': body})
- ground = Wall(x=[R, xmax], y=[0, 0], thickness=-0.3*R)
- fig = Composition({'vehicle': vehicle, 'ground': ground})
- fig.draw() # send all figures to plotting backend
- drawing_tool.display()
- drawing_tool.savefig('tmp1.png')
- drawing_tool.savefig('tmp1.pdf')
- print fig
- import time
- time.sleep(1)
- from math import degrees
- # Animate motion
- w_1 += L # start position
- fig['vehicle'].translate((L,0)) # move whole figure to start position
- def v(t):
- return -8*R*t*(1 - t/(2*R))
- import numpy
- tp = numpy.linspace(0, 2*R, 25)
- dt = tp[1] - tp[0] # time step
- def move(t, fig):
- x_displacement = dt*v(t)
- fig['vehicle'].translate((x_displacement, 0))
- # Rotate wheels
- global w_1
- w_1 += x_displacement
- # R*angle = -x_displacement
- angle = - x_displacement/R
- w1 = fig['vehicle']['wheels']['wheel1']
- w1.rotate(degrees(angle), center=(w_1, R))
- w2 = fig['vehicle']['wheels']['wheel2']
- w2.rotate(degrees(angle), center=(w_1 + L, R))
- files = animate(fig, tp, move, moviefiles=True,
- pause_per_frame=0)
- files_wildcard = files.split('%')[0] + '*.png'
- os.system('convert -delay 20 %s* vehicle1.gif' % (files_wildcard))
- os.system('avconv -r 12 -i %s -c:v flv vehicle1.flv' % files)
- os.system('avconv -r 12 -i %s -c:v libvpx vehicle1.webm' % files)
- os.system('avconv -r 12 -i %s -c:v libtheora vehicle1.ogg' % files)
- os.system('avconv -r 12 -i %s -c:v flv vehicle1.flv' % files)
- os.system('avconv -r 12 -i %s -c:v libx264 -s:v 1000x520 vehicle1.mp4' % files)
- from scitools.std import movie
- movie(files_wildcard, encoder='html', output_file='vehicle1')
- raw_input()
|