Astroid_Mset at 800 x 600 with 5 x 5 anti-aliasing

I remember when I first saw one of Paul Carlson's synthetic coloring methods and I was impressed with how it created a 3D visual effect. I picked the Astroid_Mset formula and spent a little time experimenting with the algorithm to try to figure out how it worked. Along the way, I stumbled upon some curious things. I also got to make a few nice images. There was way too much to fit in one post so I decided to break it up in bite sized parts. Astroid_Mset Part 1 - A Minibrot Detector I will start off with one of the curious things. This formula is a minibrot detector. I mean it draws a big astroid shape around every minibrot in the image. You can adjust the relative size of the astroid versus the size of the minibrot. The yellow shape in the image has four lobes and is the inside out asteroid shape surrounding the largest minibrot in the center of the image. Notice that inside the yellow astroid is a magenta period doubled astroid with 8 lobes. As you look toward the center you can see a 16 and 32 lobe astroid before they get too small to see. All the other astroids in the image surround other minibrots that are too small to see. If you would prefer to draw the image yourself the parameter file is included at the end of the post. In Part 2 I will talk about the formula parameters and why I modified the formula. Astroid_Basic { ; Exported from Fracton. reset=2004 type=formula formulafile=fracton.frm formulaname=Astroid_Mset_v2 passes=1 float=y center-mag=-1.626230169678311/0/29.62963/1/0/0 params=0.01/0.4/8/30/0/0/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:Astroid_Mset_v2 { ; Asteroid_Basic.par ; Copyright (c) Paul W. Carlson, 1997 ; Modified for compatibility with Fractint 20.04 and ; Fracton 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 astroid ; real(p2) = number of color ranges ; imag(p2) = number of colors in each color range ; ; 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 254 bailout=0, iter=0, range_num=0, i=(0,1), r=imag(p1), ;**************************************************** ; 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. This example uses an "astroid" ; curve (which has absolutely nothing to do with huge ; rocks in outer space). 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)^3+i*sin(ang)^3), ;**************************************************** ; If the orbit point is within some distance of the curve, ; set z 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 } |