# Fractacular [Fractals]

###### By Rohan Shah, Sean Abraham, and Jon Graven

Welcome to the Fractacular Page. Below, you will find what information on what we (Sean, John, and Rohan) have worked very hard on for the past few weeks. On the left side is a set of links that redirect you to the Java programs. Please read the guide to see if you can run the programs and how to use them.

Project Details [Brief]

• Our project is based primarily on creating Iterated Function Systems (IFS's), which include the Sierpinski Triangle (Or Sierpinski Pyramid in 3D) and the Sierpinski Carpet (Or Menger Sponge in 3D)
• It is mainly focused on creating 3D IFS's and displaying 2D Escape-time fractals through python or Java. For the 3D portion, we began with working in Python and moved on to Syzygy programming.
• Initially, we did some work with Escape-time Fractals such as the Mandelbrot Set and the Julia Sets, examples of which can be accessed on the left of this page. Please refer to the guide.
• We then used Barnsley iterations (Part of his "Chaos Game") to create the Sierpinski triangle in VPython. We implemented OpenGL in VPython. Jon also created the Sierpinski Pyramid (3D) through VPython.
• Finally, the third and final part of the project was to create the sponge in the cube. We were able to create a Menger Sponge, where the user could vary iterations, views, and transparency.

Definitions & Concepts

Fractals
• Self-similar geometric shape that may be repeated at a smaller level and contains an infinite or finite fractal dimension
• Two types: Iterated Function Systems and Escape-time Fractals.
Iterated Function Systems
• Short form: IFS
• This type of fractal follows a basic geometric rule or function to graph the next point in its system.
• Given a simple function, you start at a certain point in the field and then jump from point to point, pixel to pixel, drawing out the shape of the entire fractal. Since the point chosen (and the random number seed) is random, there is no specific way to know how the fractal will be drawn, but the shape will be known since it is governed by a function
• There are several examples of this, including a fern, a spiral, etc...
Escape Time Fractals
• Also known as Orbit-Trap Fractals
• The fractal is drawn pixel by pixel by determining the number of iterations through a formula.
• Using the formula, if the starting complex number goes to infinity, it is given a color depending on the number of iterations it takes to surpasss a certain orbit, circle, or "trap"
• If the point hovers inside the orbit and never exits, it is a dead point and is represented by a single color.

Rohan's Work

For my work with fractals, I focused mainly on the Mandelbrot and Julia sets. I used the Java compiler and the integrated development envirenment (IDE) Eclipse on a Windows 7 machine. I created two separate programs, one of which draws the Mandelbrot Set and the other that has the ability to draw several Julia sets. How the two sets work is governed by the equation...

zn+1 = zn^2 + c

We essentially see if a certain starting value for z or c allow this iteration formula to be trapped in a circle of radius two or escape it and draw a color based on that. So, given a visual representation or window, for the Mandelbrot Set, z is constant (0 + 0i) whereas c changes depending on where you are in the window. For the Julia set, z changes depending on location and c remains constant.

Jon's Work

The method I used to generate my Sierpinski triangle and tetrahedron is called the chaos game, a term coined by Michael Barnsley. These fractals are known as Iterated Function Systems (IFS's) This method uses a polygon a randomly selected point inside of the polygon. Then for each iteration, a random vertex of the polygon is chosen and the next point is plotted is a chosen, and constant, fraction of the way along the line between the current point and the vertex. This is repeated a large amount of times and the emerging pattern generally takes the form of a fractal, and in the case of selecting a triangle and the fraction to be one half, an approximation of the Sierpinski triangle is formed. The jump to the tetrahedron simply involves choosing a tetrahedron as the polygon and the fraction to be one half again.

2D Sierpinski Fractal (Triangle)

3D Sierpinski Fractal (Pyramid)

Sean's Work

I focused on implementing Rohan's recursive method and Jon's work with 3D in the Cube. My work was primarily focused on the Menger Sponge and recreating it for the Cave/Cube through C++ and Syzygy.

Future Implementation

Some aspects of the project that we could have worked on:
• Trying out a rotated Mandelbrot 3D graph (A Mandelbrot bulb)
• Graphing, with pixels, a Julia Set in 3D
• Working with different ways to calculate the Sierpinski fractals
• Implementing different color systems for fractals
• Enhance speed of program calculations
• Work with Sierpinski Pyramid in the cube
• More in-depth calculations with fractals (More details at higher magnification levels
• Adding zooming and keyboard movement to the PyOpenGL programs

Limitations

• Java programs are limited to a Windows Virtual Machine (And may run on Linux depending on browser config)
• Original programs run on i7 processors that are able to calculate the fractals in greate detail. The programs have slightly more slowly on older computers with slower processors
• With Python, we ran into issues regarding the slow speed of the painting process, as there were thousands of points that we had to plot and we painted while calculating. So, we used a display list to first store the data and then paint everything, helping speed up the Python program.
• With programming in C++, we faced the issue with coloring and two sides colliding, causing flickering. We were able to fix it by assigning certains colors to opposite sides. We were unable to figure out how to increase the number of iterations, however.