Chaotic Piston

by Kerry Mitchell, 29 May 2000

Basic information

The iterative method of rendering fractals can also be used to perform a simulation of a chaotic event.  Then, some characteristic of the event can be sent to the coloring routine, and Ultra Fractal now becomes a workshop for visualizing chaotic physics. This formula simulates the bouncing of a perfect ball on a vibrating piston head.

Image dropping a stell ball onto a steel table. If the ball and the table were perfect, and there was no wind resistance, the ball would bounce back to the same height from which it was dropped, fall back down, and keep rebounding to its original height.  Now, if the tabletop is replaced with a piston oscillating up and down, then two things happen.  First, the height of the piston head is different each time, causing the speed of the ball to be a little lower when the piston is high, and higher when the head is lower.  Secondly, when the piston is rising when the ball hits it, the ball will bounce off with a higher speed.  When the piston is falling, the rebound speed will be lower.  These effects combine with the normal "free fall" conditions of the ball once it leaves the plate to generate chaos.

Parameters

This simulation is based on real physics, so real units (feet and seconds) are used.

Hints

For reasonable parameter values, all points will be "inside" points.  For better simulations, use smaller timesteps.  Consequently, this can be a very slow formula, and may not be suitable for general fractaling.

Sample image

This is a three-layer image, showing the sensitivity to initial conditions by plotting 3 trajectories.  The wavy line at the bottom is the trajectory of the piston.  Time increases along the horizontal axis from left to right; height is plotted vertically.

PistonSample { ; copyright Kerry Mitchell 30jan2000
fractal:
  title="Piston Sample" width=640 height=480 author="Kerry Mitchell"
  created="January 30, 2000" numlayers=3
layer:
  method=multipass caption="New Layer 3" opacity=33 visible=yes alpha=no
mapping:
  center=2.5/1.6 magn=0.8 angle=0
formula:
  filename="lkm.ufm" entry="piston" maxiter=5000 percheck=off p_yb0=1.05
  p_vb0=0 p_amplitude=0.0833333333333333333 p_frequency=2 p_gravity=32
  p_timestep=0.001 p_ztype="trajectory"
inside:
  filename="lkm.ucl" entry="basic" transfer=cuberoot repeat=yes
  p_colorby="magnitude"
outside:
  transfer=linear repeat=yes
gradient:
  smooth=yes numnodes=4 index=0 color=16777215 index=74 color=12549963
  index=200 color=0 index=324 color=12549963
layer:
  method=multipass caption="New Layer 2" visible=yes alpha=no
mapping:
  center=2.5/1.6 magn=0.8 angle=0
formula:
  filename="lkm.ufm" entry="piston" maxiter=5000 percheck=off p_yb0=1
  p_vb0=0 p_amplitude=0.0833333333333333333 p_frequency=2 p_gravity=32
  p_timestep=0.001 p_ztype="trajectory"
inside:
  filename="lkm.ucl" entry="basic" transfer=cuberoot repeat=yes
  p_colorby="magnitude"
outside:
  transfer=linear repeat=yes
gradient:
  smooth=yes numnodes=4 index=0 color=16777215 index=74 color=4964223
  index=200 color=0 index=324 color=4964223
layer:
  method=multipass caption="New Layer 1" visible=yes alpha=no
mapping:
  center=2.5/1.6 magn=0.8 angle=0
formula:
  filename="lkm.ufm" entry="piston" maxiter=5000 percheck=off p_yb0=0.95
  p_vb0=0 p_amplitude=0.0833333333333333333 p_frequency=2 p_gravity=32
  p_timestep=0.001 p_ztype="trajectory"
inside:
  filename="lkm.ucl" entry="basic" transfer=cuberoot repeat=yes
  p_colorby="magnitude"
outside:
  transfer=linear repeat=yes
gradient:
  smooth=yes numnodes=4 index=0 color=16777215 index=74 color=8342463
  index=200 color=0 index=324 color=8342463
}