Fractals Exploration Assignment

HONR 300/CMSC 491:
L-Systems Lab / Fractals Exploration Assignment
Mon 2/20/12 (Fractals Exploration due Wed 2/29/11)
You may do the in-class lab individually or in pairs. The fractals exploration
assignment should be turned in individually. As with all assignments, you may work in
pairs or small groups to discuss the assignment, but the work that you turn in should
be your own. If you talk to other students about how to do the “scavenger hunt,” that’s
fine; but by turning in your answesr, you are asserting that you fully understand the
answers yourself and are not just blindly submitting what another student figured out.
In-Lab Activity:
Getting Started





Start NetLogo using the Windows Program menu.
Open the L-Systems model: File -> Models Library -> Mathematics -> Fractals -> LSystem Fractals
Click the Swirl button, then click Go Once several times to create the Swirl
fractal.
Experiment with restarting the Swirl model (click Swirl again, then Go Once
again—don’t use the Setup button just yet, since that changes to the default
model).
Try creating each of the built-in fractals listed at the bottom of the control
panel (Swirl, Ball, Tree1…). After selecting a fractal, you can also click Go to
let the model run indefinitely, or Go Once repeatedly to see how the fractal is
constructed one step at a time. Click Go again to stop the model. (Be careful
when using the Go command – these fractals can exhibit exponential growth
and can really slow down your computer! Depending on how long you let the
model run, it may take a few seconds for the model to stop after clicking the
Go button. In the worst case, you may have to manually kill and restart
NetLogo. Caution: you should always stop the model before trying to start a
different model.)
Examining a Simple Fractal




Let’s look at how one of the L-systems is written more carefully.
Click on Setup, then Go Once a few times to see how this fractal grows.
Go to the Procedures tab and look at the line of code just below the commented
region that says, “write your own rules here.” The line of code reads:
fd 3 rt 15 spawn fd 3 lt 30 fd 3
This is a simple “turtle program” that is applied on each iteration to every
turtle in the system. Initially there is just one turtle, at (init-x, init-y) (these
values can be set using the Interface sliders). Breaking it down, when you
click Go Once, each turtle will:
o Move forward three pixels.
o Turn right 15 degrees.






o Create (“spawn”) another turtle at the current location (which, on the
next iteration, will start running the same program from that location
and orientation).
o Move forward another three pixels.
o Turn left 30 degrees.
o Move forward three more pixels.
Question: How many turtles will there be after k time clicks?
Question: How far (in total pixels traveled in any direction) will the initial
turtle have traveled at the end of k time clicks?
Every turtle also changes its color slightly after spawning a child (you can see
this in the spawn procedure), so you can see the age of each turtle visually in
the display. New turtles are set to color “init-color,” and the color value is
incremented by “color-inc.” (Colors in NetLogo are defined by a numeric
value from 0 to 140; see
http://ccl.northwestern.edu/netlogo/docs/programming.html#colors to
learn more about colors if you’re interested.)
Go to the Interface tab, restart this model (using Setup), and see if you can get
an intuition for how this program builds a tree-like fractal. After the first
iteration, you’ll see a white vertical line (the turtle’s forward movement),
capped by a white dot (the spawned turtle), followed by a pink line that
bends right, then left, and is capped by a pink dot (the original turtle). Make
sure you understand this fractal thoroughly before moving on.
Bring up the “turtle monitor” (choose “Turtle Monitor” under the “Tools”
menu) and type “1” in the “who” field to watch the attributes of the first
turtle as the fractal grows. (You’ll only be able to do this after you’ve clicked
“Go Once” at least once, since the turtle doesn’t exist before then.)
Question: What is the display window in the turtle monitor showing? What
does the slider do? What is the meaning of the “heading” attribute, and what
units is it in?
Examining Recursive Fractals


In the book, Flake creates recursion with bracketed grammar expansions, in
which each successive “generation” is decremented in size by a fixed ratio
(given as a switch to the commands).
In NetLogo, the recursive Tree1 fractal rule looks like this:
fd 4 rt 15 fd 8 spawn rt 180 skip 8 rt 180 lt 15 fd 4 lt 15


spawn fd 8 die
Note that the NetLogo model creates a recursive fractal by spawning,
backtracking over the turtle’s path (“rt 180” makes a U-turn; “skip 8” jumps
forward 8 without leaving a trail; “rt 180” makes another U-turn), then
spawning again—and in this case, killing the original turtle off at the end of
the cycle. You can see this code in the Tree1 procedure in the Procedures tab.
Question: How many turtles will there be after k rounds of Tree1?
Look at the NetLogo model for Sierpinski’s Tree. It implements the Chaos
Game (which was in Wednesday’s slides but we didn’t quite get to it – if you
want to see the Chaos Game, you can visit this link:
http://www.shodor.org/interactivate/activities/TheChaosGame/ .)



Work back and forth between the code and the model interface to
understand what’s happening as each point generates a new midpoint
between itself and a vertex.
Koch’s Snowflake builds the simplest snowflake first; on each subsequent
iteration, every edge of the snowflake becomes a new Koch curve with edges
that themselves become Koch curves. Again, spend some time tracing
through and understanding this more complex model.
Note that both the Sierpinski and Koch models leave behind “traces” of the
process that was used to build them (e.g., instead of peaks along the edges of
the Koch snowflake, there are filled triangles).
Building a New Fractal






Go back into the Procedures tab, and scroll to the bottom.
Copy the to setup-koch code block and the to koch code block below it.
Paste this copy below the existing code.
In this copied code, change setup-koch to setup-mykoch, and set rule-set “koch” to
set rule-set “mykoch”.
Change to koch to to mykoch in the line set rule-set “mykoch” in the setup-mykoch
procedure.
In your new mykoch procedure, delete the first part (ifelse and repeat) of the
ifelse ticks=0 block, leaving only the last line (from which you need to remove
the square brackets):
spawn fd len lt 60 spawn fd len rt 120 spawn fd len lt 60 spawn


fd len rt 120
Return to the Interface window and create a button to run your new
procedure:
o Click the + ADD button at the top, then choose Button from the dropdown slider to the right of +ADD.
o Click where you want the new button to appear.
o You’ll see a popup dialog window; type setup-mykoch in the Commands
text box and mykoch in the Display name text box.
o Close the dialog window by clicking OK.
o Click your new mykoch button, then Go or Go Once. You should see a
(vertical) Koch curve grow itself.
Congratulations—you’ve written your first NetLogo model and reached the
end of the lab!
Fractals Exploration Assignment
Getting Started
You will probably want to install NetLogo on your own machine. It’s very
straightforward: just visit http://ccl.northwestern.edu/netlogo/and download the
appropriate version for your machine. (NetLogo runs under Mac, Windows, and
Linux.)
You may want to use the NetLogo manual to help you with this assignment; it’s
available on the NetLogo website and is linked under the Help menu in the NetLogo
interface.
To save the models you create or modify, use the File…Save As command. You can
open models from the File window, or by double-clicking on the saved model in a
directory window.
To save a screen capture, use File… Export… View (to export just the display window
containing the fractal drawing), or File… Export… Interface (to export the entire
interface window, including the buttons and sliders). Be sure you name this file
with a name ending in “.png” – NetLogo creates a PNG file but won’t put the file
extension on automatically.
1. Fractal Scavenger Hunt (40 points)
Here are six fractals that I created by replacing the line of code in the apply-rules
procedure in the NetLogo L-Systems model. Use your understanding of fractals to
determine the code that will generate each of these fractals. (You should submit
your answers in hardcopy; your answer here is just the line or lines of code to
replace apply-rules with to generate the fractal. Feel free to add additional remarks or
observations if you want.)
You may want to look at the full-size pictures in color to see the details more clearly;
I’ve posted them on the course website. To get full credit, your code must replicate
both the color and the scale of the fractals precisely. In all cases, init-colors is 9 and
color-inc is 5.
HONR 300 students: You only need to write the code to generate the first four
fractals. Each fractal requires just a single line of code.
CMSC 491 students (and HONR 300 students who want the extra challenge): To
generate the last two fractals, I also modified the setup procedure to set the turtles’
initial len parameter, using this code:
ask turtles [ set len 1 ]
(len is set to 1 for Fractal 5, and to 5 for Fractal #6.) These fractals also require
multiple lines of code that modify the length on each iteration, as well as moving the
turtle. You should not use the Skip command for any of the fractals. The code for the
Spiral fractal (#5) includes a stopping condition to cause the turtle to die when a
maximum length is exceeded. The fractal in the picture is the final view, and you
should include the stopping condition in your code.
Fractal #1: Circle (Note: I changed init-x to -50 in the Interface tab ; init-y is still 0.)
Fractal #2: Dodecagon (I changed init-x to -50; init-y is still 0.)
Fractal #3: Shrubbery (Here, init-x is 0; init-y is -50. I applied “Go Once” ten times to
generate the 10th level of this fractal.)
Fractal #4: Tree (Init-x is 0; init-y is -50. I applied “Go Once” ten times to generate the
10th level of this fractal.)
Fractal #5: Spiral
Fractal #6: Frond (Init-x is 0; init-y is -100. I applied “Go Once” 12 times to generate
the 12th level of this fractal.)
2. Create Your Own Fractal (60 points)
Create your own fractal program in NetLogo, and tell me about it.
For this assignment, it’s fine to start with the L-System program or one of the other
existing NetLogo programs.
 If you are in HONR 300, you can just experiment with the parameter settings
to explore the space of fractals that can be created with the program.
 If you are in CMSC 491, you should modify the program in some significant
way to create a family of fractals that wouldn’t have been possible with the
existing code. This new fractal family should involve at least one new
parameter, which you should add to the interface as a slider. (For example, a
“middle p% Koch curve” might build a peak from a fraction of each edge
other than 1/3 – for example, if p was .5, then you would get the “middle
half” Koch curve that we talked about in class.)
 You’re welcome to go beyond these requirements: HONR 300 students can
modify models to your heart’s content; and any student can create a new
model from scratch if you so choose.
After creating your new model, you should experiment with it to understand the
space of fractals that it can generate, and how the parameters affect the way the
fractal looks. You should write a short summary of how your model works,
including some screen captures of different variations of the fractal. You should also
include the code itself from the Procedures tab (you can just cut and paste it). This
report should not be longer than two pages (not counting the code), and should be
printed and handed in as hardcopy.
You should submit the model itself by saving it as a “.nlogo” file in the “Save As”
dialog, and uploading this to the “Fractal Model” project in Blackboard. Your model
summary should be submitted as hardcopy, along with the answers to the fractal
identification exercise.