MATH's BEAUTY IN DESERT

Artist's Statement

The fascinating mathematic structures, the patterns derived from nature related to the renowned Fibonacci, and the spiral Phyllotaxis.


The art embodied the uniqueness of our contemporary society, the diversity of every major metropolitan, and the multicultural of the entire United States of America as a whole. The sentiment of the individual art piece represents every single human on earth as each of us is uniquely beautiful. Using images of the succulent is a perfect metaphor because they are resilient, pleasing-looking, diverse, and even flourish on barren surfaces like high mountains or dry deserts.


I wrote a program for the computer to generate the 3D succulents following the mathematic patterns but also randomly creates unrepeatable shapes and distinctive features.


Technical Information

There are multiple procedures in the program and the core is the Fibonacci sequence generator procedure. It helps to generate a pattern of the sum of the preceding two number 0 and 1, which help to create the spiral Phyllotaxis.


A set of rule for the program to create succulent:

  • Randomly choosing a shape in the list (triangle, circle, cylinder, square)

  • An angle to turn between 30 and 150

  • Random scale for the succulent (2 <= scale <3)

  • Random colors with a certain limit

  • Random locations x and y


A few challenges posed during the making of the art are the limitations on the 3D; however, this is easily overcome by the natural sequence of Fibonacci.

NetLogo 3D Shapes

Circle

Triangle

Square

Cylinder

Early Stage Design

Results

Each time running the program, it successfully created beautiful artwork. It achieved uniqueness by not having any shape exactly the same as each other.

Run 1

Run 2

Run 3

Run 4

Run 1

Run 2

Run 3

Run 4

3D Printing

Using the built-in-button in the Interface, users can easily generate their own unique 3D model by clicking on it. Inside the folder where they saved the program will have an x3d file, using a compatible software to view.

This file later can be imported into a 3D printing software to customize and print out their own model.

Model 1

Model 2

Model 3

A Group of Models

Code Viewer

extensions [x3d raytracing]globals [fibo-list rando-shape rando-angle rando-sign rando-size rando-z scale randox randoy rando-color]breed [spirals spiral]breed [leaves leaf]breed [sands sand]breed [balls ball]
to setup clear-all raytracing:clear-lights reset-ticks raytracing:add-light -16 0 0 white raytracing:add-light -16 -16 0 pink raytracing:add-light 16 16 0 blue raytracing:add-light 16 0 0 red raytracing:add-light 0 16 0 green ;----end of add lights------- fibonacci n zoom 37; orbit-left 230; orbit-down 50end
to fibonacci [end-num] set fibo-list [1] let first-num 0 let second-num 1 repeat end-num [ let total (first-num + second-num) set first-num second-num set second-num total set fibo-list insert-item (length fibo-list) fibo-list total ] if show-fibo? [show fibo-list]end
to create-succulent draw-spiral num-succend
to make-a-model set num-succ 1 set n 10 setup set export? true create-succulent set export? false set num-succ 10end
to activate-random-shape set rando-shape one-of (list "triangle" "circle" "square" "cylinder" "triangle") set rando-angle random-float 120 + 30 set rando-z random-float 0.08 set scale random 3 + 2 set rando-color (list (59 + random 100) (217 - random 100) (159 - random 100)) set randox random-xcor if randox > 10 [set randox randox - 5] if randox < -10 [set randox randox + 5] set randoy random-ycor if randoy > 10 [set randoy randoy - 5] if randoy < -10 [set randoy randoy + 5]end
to draw-spiral [num] repeat num [ activate-random-shape
create-ordered-spirals random 5 + 5[ set zcor -9 set color green set shape rando-shape setxy randox randoy ;pen-down ] foreach fibo-list [fibo-index -> ask spirals [ left (rando-angle / scale) fd ((0.1 + fibo-index * 0.05) / scale) let corx xcor let cory ycor let corz zcor hatch-leaves 1 [ set color rando-color set shape rando-shape set size ((fibo-index * 0.1) / scale) left 30 tilt-up 90 right 30 setxyz corx cory (corz - ((fibo-index * rando-z) / scale)) raytracing:set-reflection one-of [0 0 0 0.1] ;if size < 1.5 [die] ] ] ] ask spirals [die] ] if export? [x3d:export "your_3D_succulent.x3d"]end
to make-ground ask patches with [pzcor <= min-pzcor + 5] [ set pcolor one-of [[195 167 108] [148 110 93] [191 136 81]] ] create-ordered-sands 10000 [ setxyz random-xcor random-ycor (min-pzcor + 5 + 0.5) set shape "circle" set color one-of [[195 167 108] [148 110 93] [191 136 81]] set size random-float 0.3 + 0.3 raytracing:set-refraction random-float 0.4 raytracing:set-reflection random-float 0.4 if random-float 100 < 3 [ set color [255 255 255] set size 0.3 raytracing:set-highlight 0.4 30 raytracing:set-reflection 1 ] if random-float 100 < 5 [raytracing:set-texture "T_Stone13" 1.0 set color gray] if random-float 100 < 3 [ raytracing:set-texture "DMFDarkOak" random-float 2 set shape "cylinder" tilt-up random 360 set color red raytracing:set-reflection 0 if random-float 100 < 1 [ set size size + random-float 3
] ] ]
end
to make-balls create-ordered-balls 200 [ set shape "circle" set size random-float 0.3 + 0.05 setxyz random-xcor random-ycor random-zcor set color (list 255 255 255 10) raytracing:set-reflection 1 ;raytracing:add-light xcor ycor zcor white ] ask balls [ ;if zcor < -10 and zcor > -30 [raytracing:add-light xcor ycor zcor one-of (list red green blue)] if xcor > 15 or xcor < -15 [die] if ycor > 15 or ycor < -15 [die] if zcor > -3 or zcor < min-pzcor + 5 [die] ]end
to special-render let c 0 repeat 25 [ let name (word "succulent-black" c) setup create-succulent ;make-ground ;make-balls raytracing:output-resolution 800 800 raytracing:render name 10 set c c + 1 ]end
to render raytracing:output-resolution 1920 1080 raytracing:render "succulent" 10end
to render-movie raytracing:start-movie "movi" 10 raytracing:output-resolution 1080 720 orbit-down 50 facexyz 0 0 -5 repeat 20 [ orbit-right 2 tick raytracing:render-next-movie-frame ] repeat 20 [ orbit-right 2 zoom 1 orbit-down 0.2 tick raytracing:render-next-movie-frame ] repeat 20 [ orbit-right 1.8 orbit-down 2 tick raytracing:render-next-movie-frame ] repeat 20 [ orbit-right 2 zoom -1 orbit-up 0.2 tick raytracing:render-next-movie-frame ] repeat 30 [ orbit-right 2.5 tick raytracing:render-next-movie-frame ] repeat 30 [ orbit-right 5 orbit-up 2 zoom -1 tick raytracing:render-next-movie-frame ] repeat 30 [ orbit-right 10 tick raytracing:render-next-movie-frame ]
end