Experiments in Motion Graphics

This blog post is a tribute to the work of Sr. John Whitney, a visionary animator and computer graphics researcher, widely considered one of the fathers of computer animation. The very first program I wrote was a recreation of the graphics displayed in the video bellow, so Whitney has a special place in my heart.

The graphics displayed in the video were produced by Sr. Whitney and his research partner, Dr. Jack Citron, under their IBM research program, around 1969. These animations are procedurally generated based on a single polar coordinate equation.

The intricacies of the graphics are better explained by Whitney himself on a motion picture entitled Experiments in Motion Graphics and on one of his papers regarding the research program: CAMP.

There’s a lot of flickering going on in the video — I guess they didn’t know how to film computer monitors properly in the late 60s. I advise epeliptics to be careful.
Experiments in Motion Graphics

If you’re curious, here’s the polar coordinate equation I mentioned (roughly):

r(θ)=sin(BSJθ(θS)N)Pr \left ( \theta \right ) = \sin {\left ( \frac{B \cdot S \cdot J \cdot \theta \cdot \left ( \theta - S \right )}{N} \right )}^P

Here’s also a Python-esc program for drawing (a simplified version of) the graphics:

def polar_to_cartesian(radius, angle):
  """
  Converts polar coordinates to cartesian
  coordinates applying some distortions
  """
  x = C + E * radius * cos(angle) ** H
  y = D + F * radius * sin(angle) ** Z

  return (x, y)

def draw():
  """
  Draws each frame
  """

  for i in range(n_lines):
    phi_1 = theta_1 + i * a_delta
    phi_2 = theta_2 + i * a_delta

    p_1 = polar_to_cartesian(r(phi_1), phi_1)
    p_2 = polar_to_cartesian(r(phi_2), phi_2)
    draw_line(p_1, p_2)

    theta_1 += speed_1
    theta_2 += speed_2

You can find more information about all this at animationstudies.org. It’s an interesting read.