Hans Petter Langtangen vor 13 Jahren
Ursprung
Commit
887e994b08
1 geänderte Dateien mit 74 neuen und 0 gelöschten Zeilen
  1. 74 0
      doc/src/sketcher/src-sketcher/vehicle1.py

+ 74 - 0
doc/src/sketcher/src-sketcher/vehicle1.py

@@ -0,0 +1,74 @@
+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')
+
+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_vehicle(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_vehicle, moviefiles=True,
+                pause_per_frame=0)
+
+from scitools.std import movie
+movie(files, encoder='html', output_file='anim')
+
+raw_input()