lorenz.py 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. """The Lorenz attractor is a set of chaotic solutions of
  2. a particular system of ordinary differential equations"""
  3. from vedo import *
  4. p = (25, -10, -7) # starting point (initial condition)
  5. dt = 0.01 # time step
  6. # Define the ODE system to integrate (Lorenz equations)
  7. pts, vel = [], []
  8. for t in np.arange(0, 20, dt):
  9. x, y, z = p
  10. v = np.array([-8/3*x+y*z, -10*(y-z), -y*x+28*y-z])
  11. p = p + v * dt
  12. pts.append(p)
  13. vel.append(mag(v))
  14. # Plot the trajectory in 3D space
  15. line = Line(pts).lw(2)
  16. line.cmap("winter", vel).add_scalarbar("speed")
  17. line.add_shadow("x", 3, alpha=0.2)
  18. line.add_shadow("z", -25, alpha=0.2)
  19. pt = Point(pts[0]).color("red4").ps(12)
  20. pt.add_trail(lw=4)
  21. pt.add_shadow("x", 3, alpha=0.5)
  22. pt.trail.add_shadow("x", 3, alpha=0.5)
  23. pt.trail.add_shadow("z",-25, alpha=0.5)
  24. def loop_func(event): # move the point
  25. if len(pts) > 0:
  26. pos = pts.pop(0)
  27. pt.pos(pos)
  28. pt.update_trail()
  29. pt.update_shadows()
  30. plt.render()
  31. plt = Plotter(axes=dict(xygrid=False))
  32. plt.add_callback("timer", loop_func)
  33. plt.timer_callback("start")
  34. plt.show(line, pt, __doc__, viewup="z")
  35. plt.close()