# The Aizawa Attractor

Articles —> The Aizawa Attractor

The Aizawa attractor is a system of equations that, when applied iteratively on three-dimensional coordinates, evolves in such a way as to have the resulting coordinates map out a three dimensional shape, in this case a sphere with a tube-like structure penetrating one of it's axis. The equations themselves are fairly straightforward:

**dx = (z-b) * x - d*y**

**dy = d * x + (z-b) * y**

**dz = c + a*z - z ^{3} /3 - x^{2} + f * z * x^{3}**

where a = 0.95, b = 0.7, c = 0.6, d = 3.5, e = 0.25, f = 0.1. Each previous coordinate is input into the equations, the resulting value multiplied by a time value (here arbitrarily chosen as 0.01) and then added to the previous value. To place this in the context of a program, and utilizing a previous java class structure developed for the Lorenz Attractor, a new Transform implementation would be of the form:

double dt = 0.01; double a = 0.95, b = 0.7, c = 0.6, d = 3.5, e = 0.25, f = 0.1; ... Transform<Tuple3d> aizawa = new Transform<Tuple3d>(){ @Override public Tuple3d transform(Tuple3d val) { double x = val.x, y = val.y, z = val.z; double x1 = (val.z-b)*val.x - d*val.y; double y1 = d * val.x + (val.z - b) * val.y;; double z1 = c + a*val.z - (Math.pow(val.z, 3)/3d) - (Math.pow(val.x, 2) + Math.pow(val.y, 2)) * (1 + e * val.z) + f * val.z * ( Math.pow(val.x, 3)); Tuple3d t = new Tuple3d(x + dt * x1, y + dt * y1, z + dt * z1); return t; } };

In action, the attractor evolves into a beautiful sphere with a tube-like structure penetrating down its y-axis. The image below is the attractor with each generated coordinate colored as a cyan pixel, the initial 'seed' coordinate starting at x = 0.1, y = 0, and z = 0.

The Aizawa Attractor.

While a static image gives a beautiful rendition of the attractor, putting the attractor in motion can give an even greater depiction of its behavior. In the video below, I rendered the attractor in three dimensions (JOGL/OpenGL) from several different angles and stages.

The Aizawa Attractor. Programmed in Java and rendered using JOGL/OpenGL. Music by Chris Zabriskie, Creative Commons (unaltered).

Initially, several random coordinates were generated and their paths then followed based upon the Aizawa system (their paths defined by a spline curve between subsequent values). Subsequent views show several thousand random points along a single spline trajectory of the attractor.

# Notes on Video Construction

Construction of the video went through several trials and modifications. In the initial stages, random coordinates were chosen based upon a uniform distribution between -n and n (on all axis, where n ranged in values under ten). However several points consistently coalesced along the negative z-axis, an unwanted behavior which is seen as a vertical line in the center of the following image:

Artifact in the creation of the Aizawa Attractor animation.

To alter this behavior, I decided to analyze how these values evolved. First, one hundred values representing this population were identified by analyzing a frame in which they were at their worst: all coordinates in this frame were sorted based upon their z value and the first one hundred values of the sorted list investigated further. Assuming how these values evolved would be based upon their original value, the coordinates from which they originated (in the first frame) were plotted in R using the *pairs* function to look for trends.

Plot showing the points within the attractor artifact, showing relatively large negative z-axis values contributing to the artifact.

The plot suggests that this concentration of values along the negative z-axis arise from a population of coordinates with larger negative z start values. Thus, to alleviate this artifact the random points generated in the video were offset along the z-axis in the positive direction, allowing for a more uniform and elegant distribution of points as the attractor evolves.

There are no comments on this article.