epicycloid_mset.jpg

Epicycloid

Astroid_Mset Part 4 - Changing the orbit trap curve

In this installment we will change the orbit trap curve from an astroid to an epicycloid. An epicycloid is a circle with bumps on it. I rewrote the formula for an epicycloid so that you can enter the number of cusps and the amplitude of each cusp. These values are changeable in parameter p3 with the real(p3) = number of cusps and imag(p3) = cusp amplitude. The number of cusps should be an even number. If you make the cusp amplitude = 0 you get a circle for the curve. If you want to see the details of the code you can examine the parameter file below.

If you are looking for a good source of curves to put in the formula you might try the book A Catalog of Special Plane Curves by J. Dennis Lawrence. It has hundreds of curves complete with illustrations and the parametric form that you need for this formula. I did run into a few issues that will limit the curves that you can use here. It appears that the distance calculation removes loops in the curve in addition to turning them inside out. It might be possible to overcome this limitation but it wasn't obvious to me how to do it.

To make more interesting images it is usually better to have more overlap between the curves. To get that, you need a place where there are a lot of minbrots that are close together and all at nearly the same depth. One place where this occurs is in the arms of spirals as in the above image.

I did a short animation of changing the number of cusps in the epicycloid.

This completes the things I tried with the Astroid_Mset. I hope other people get a chance to experiment with this great formula.

The parameter file for the image is below:

Epicycloid { ; Exported from Fracton.
 reset=2004 type=formula formulafile=fracton.frm
 formulaname=Epicycloid_Mset passes=1 float=y
 center-mag=-0.727258489990811/0.2427890625/189.629\
 632/1/0/0
 params=0.02/0.25/8/30/8/0.25/0/0/0/0 maxiter=500
 inside=255 outside=summ
 colors=000fOz<28>I0Kz0f<28>O08z88<28>O00zW0<28>c40\
 zz0<28>aG00zR<28>0C40zz<28>0CCGGz<28>00O000<12>000\
 z88 }
frm:Epicycloid_Mset {
 ; Epicycloid_Mset based on Astroid_Mset
 ; Astroid_Mset copyright (c) Paul W. Carlson, 1997
 ; Epicycloid_Mset by Mike Frazier, 2011
 ;****************************************************
 ; Always use floating point math and outside=summ.
 ;
 ; Parameters:
 ;   real(p1) = a factor controlling the width of the curves
 ;   imag(p1) = radius of the curve
 ;   real(p2) = number of color ranges
 ;   imag(p2) = number of colors in each color range
 ;   real(p3) = number of cusps, even integers
 ;   imag(p3) = cusp amplitude (0 to 1)
 ;
 ; Note that the equation variable is w, not z. 
 ; Initialize cindex to the index of the background color
 ; Formula modified to avoid color index 0 which can not
 ; be used with outside=summ in FractInt v20.04
 ;****************************************************
 w=0,
 c=pixel,
 z=0,
 cindex=254,; Background color
 bailout=0,
 iter=0,
 range_num=0,
 i=(0,1),
 r=imag(p1),
 f=real(p3)+1,
 b=imag(p3),
 ;****************************************************
 ; In the accompanying par file,
 ; we have 8 color ranges with 30 colors in each range
 ; for a total of 240 colors. The first range starts at
 ; color 1.  Pixels will use color 254 when |w| > 1000.
 ; Other values can be used here as long as the product
 ; of num_ranges times colors_in_range is less than 255.
 ; Color 254 is reserved for the background color and 
 ; color 255 can be used for the inside color.
 ;****************************************************
 num_ranges=real(p2),
 colors_in_range=imag(p2),
 ;****************************************************
 ; Real(p1) controls the width of the curves.
 ; These values will usually be in the range 0.001 to 0.1
 ;****************************************************
 width=real(p1),
 index_factor=(colors_in_range-1)/width:
 ;****************************************************
 ; The equation being iterated.  Almost any equation
 ; that can be expressed in terms of a complex variable
 ; and a complex constant will work with this method.
 ; This example uses the standard Mandelbrot set equation.
 ;****************************************************
 w=w*w+c,
 ;****************************************************
 ; The orbit trap curve is an epicycloid.
 ; Any two-dimensional curve can
 ; be used which can be expressed in parametric form in
 ; terms of the angle from the origin.
 ;****************************************************
 ang=atan(imag(w)/real(w)),
 astroid=r*(cos(ang)-b*cos(f*ang)+i*(sin(ang)-b*sin(f*ang))),
 ;****************************************************
 ; If the orbit point is within some distance of the curve,
 ; set cindex to the index into the colormap and set the bailout
 ; flag.  Note: the way we use the "distance" here has
 ; the effect of turning the curves inside-out in the image.
 ;****************************************************
 distance=abs(|w|-|astroid|),
 if(distance<width&&iter>1),
 cindex=index_factor*distance+range_num*colors_in_range+1,
 bailout=1,
 endif,
 ;****************************************************
 ; Cycle through the range numbers (0 thru num_ranges - 1)
 ; With two color ranges, even iterations use color
 ; range 0, odd iterations use color range 1.
 ;****************************************************
 range_num=range_num+1,
 if(range_num==num_ranges),
 range_num=0,
 endif,
 ;****************************************************
 ; Since we are using outside=summ, we have to subtract
 ; the number of iterations from z.
 ;****************************************************
 iter=iter+1,
 z=cindex-iter,
 ;****************************************************
 ; Finally, we test for bailout
 ;****************************************************
 bailout==0&&|w|<1000
 }

Part 3

Return to the Fracton main page