Space Filling Curve art installed in bank technology center lobby

Space Filling Curve Art 2004 -2014

From 2004-2014 I explored various patterns that can be generated by crawling a space filling curve and drawing rectangles. I generated hard drives full of these and have sifted through around 50,000 so far, some of the best are in the galleries below.

Square Format (Gallery 556 images)

Wide Format (Gallery 131 images)

 

15_03 11/2/2007 by Don Relyea

15_03 11/2/2007 by Don Relyea

The algorithm I used to make these images is based on the Hilbert space filling curve, discovered by mathematician David Hilbert. This version of my program is new in that it subdivides spaces within the total space to be filled and runs the algorithm to fill the smaller spaces separately. Each smaller space is centered on a point on the curve causing the smaller renderings to intersect the larger one in interesting ways.

Space Filling Curve art installed in bank technology center lobby

Space Filling Curve art installed in bank technology center lobby

Abstract:
Exploration of Related Points on a Space Filling Curve was created in a custom application written in Director and C++. The result is an archival Lysonic print on a full sheet of arches.
The algorithm used is based on the Hilbert space filling curve. The program recursively draws rectangles along the curve. At certain times during the execution it draws larger concentric rectangles and connects special points with trailed concentric rectangles.

Blue Recursive 11/1/2007 for www.nanohedron.com

Blue Recursive 11/1/2007 for www.nanohedron.com

Statement:
I write my own custom software applications to create generative art and video. I have spent some time mildly obsessed with infinite dimensional Euclidean space, also known as Hilbert space.

Exploration of Related Points on a Space Filling Curve was created in an application written in Director and C++. The program can generate these images with relative ease, much easier than I could by hand.

The main program algorithm is based on the Hilbert space filling curve, discovered by mathematician David Hilbert in the early 1900’s. The program recursively draws rectangles along the curve, storing special points in a lookup table. At certain times during the execution it draws larger concentric rectangles and connects the stored special points with trailed concentric rectangles. The program accesses a color theory algorithm that manages the colors used during program execution. It can output very large detailed high resolution images. In fact it can create images that are much larger than I can afford to print.

Space Filling Curve art installed in bank technology center lobby

Space Filling Curve art installed in bank technology center lobby

Technical Brief:
A custom application was created in Adobe Director and C++ to render this image. The algorithm is based on the Hilbert space filling curve. The program recursively draws rectangles along the curve. At certain times during the execution it draws larger concentric rectangles and connects special points along the curve with trailed concentric rectangles.

Included is the main source code below so one can see the code manifestation of the mathematics behind this work. (lingo condensed from the Adobe Shockwave version):

on hilbert_draw(x0, y0, xis, xjs, yis, yjs, n)
–/* n=number of recursions*/
–/* numsteps= number of drawing iterations between two points on the curve*/
–/* x0 and y0 are coordinates of bottom left corner */
–/* xis & xjs are the i & j components of unit x vector */
–/* similarly yis and yjs */
repeat while n > 0
hilbert_draw(x0, y0, yis/2, yjs/2, xis/2, xjs/2, n-1)
draw_from_to_numsteps( point(x0+xis/2, y0+xjs/2), point(x0+(xis+yis)/2, y0+(xjs+yjs)/2), numsteps)
hilbert_draw(x0+xis/2, y0+xjs/2 ,xis/2, xjs/2, yis/2, yjs/2, n-1)
draw_from_to_numsteps( point(x0+xis/2, y0+xjs/2), point(x0+(xis+yis)/2, y0+(xjs+yjs)/2), numsteps)
hilbert_draw(x0+xis/2+yis/2, y0+(xjs/2)+(yjs/2), xis/2, xjs/2, yis/2, yjs/2,n-1)
draw_from_to_numsteps( point(x0+(xis/2)+(yis/2), y0+(xjs/2)+(yjs/2)), point(x0+(xis+yis)/2, y0+(xjs+yjs)/2), numsteps)
hilbert_draw(x0+(xis/2)+yis, y0+(xjs/2)+yjs, -yis/2,-yjs/2, -xis/2, -xjs/2,n-1)
draw_from_to_numsteps( point(x0+xis/2+yis, y0+xjs/2+yjs), point(x0+(xis+yis)/2, y0+(xjs+yjs)/2), numsteps)
n=n-1
if n=0 then exit repeat
end repeat
end

Leave a Reply

Your email address will not be published. Required fields are marked *