msltoe
Iterator
Posts: 187


« on: January 26, 2010, 03:36:18 AM » 

In playing around with multiple attractors, I found that if I get rid of the "squaring" the radial part and just look at reflections of the vertices (which I call "attractors") of a polyhedron, I get something similar to a Sierpinski fractal.
Here's the algorithm for an icosahedron with 12 unitynormalized vertices (xv[k],yv[k],zv[k]): while ((norm<4)&&(iter<imax)) { iter++;
min = 9999; jmin = 0; for (k = 0;k < 12;k++) { r = (xxv[k])*(xxv[k]) + (yyv[k])*(yyv[k]) + (zzv[k])*(zzv[k]) ; if (r<min) { min = r; jmin = k; } } x = a2*x + xv[jmin]; y = b2*y + yv[jmin]; z = c2*z + zv[jmin];
norm = x*x+y*y+z*z; }
Here's what it looks like with a closeup of the center.


« Last Edit: January 26, 2010, 02:57:51 PM by msltoe, Reason: added \"unitynormalized\" »

Logged




kram1032


« Reply #1 on: January 26, 2010, 03:40:56 PM » 

nice



Logged




msltoe
Iterator
Posts: 187


« Reply #2 on: January 28, 2010, 04:08:00 AM » 

Treating the above algorithm as a Julia set (a,b,c = 0), the resulting object looks almost exactly like a Sierpinski icosahedron.



Logged




Tglad
Fractal Molossus
Posts: 703


« Reply #3 on: January 28, 2010, 06:34:58 AM » 

There are many ways to make these Sierpinski objects, I think the original Sierpinski triangle came from a drawing game:  draw 3 big dots on a piece of paper  put a dot anywhere between them 1. draw a new dot half way between this and any one of the big dots 2. goto 1
Amazingly, this simple game produces the sierpinski triangle if you do it enough times.
It probably expands to 3d and icosahedrons, so:  pick any point inside an icosahedron 1. add a point half way between this and any of the corners 2. goto 1



Logged




msltoe
Iterator
Posts: 187


« Reply #4 on: January 28, 2010, 04:04:33 PM » 

Tglad,
I agree. I noticed some of your latest objects have Sierpinskilike qualities, too. What I learned from my discovery (which someone else probably found years ago) was that I used a scaling operation (times 2) and a translation (to the nearest vertex) and got a shape that still "conforms", i.e., angles & local shape are retained. So, the question is now that we can obtain a Sierpinski fractal from a Mandelbrot (or Julia)setlike generating algorithm, what other conformal mapping operations can we apply to this object to make it more interesting?
mike



Logged




kram1032


« Reply #5 on: January 28, 2010, 07:01:50 PM » 

a Mandelbrotstyle sierpinsky thingy that's actually pretty interesting,



Logged




Tglad
Fractal Molossus
Posts: 703


« Reply #6 on: January 29, 2010, 12:56:12 AM » 

Yes, interesting... your mapping manages to be conformal by splitting the space up; conformal but not continuous. It shows that conformal is more important than continuous in having a nice looking fractal... at least in this case.
The other conformal mappings are: rotation by any angle/axis, reflection and inverse (scale each point by k/point's radius^2).. that's it.
One thing the mandelbrot does is to doublecover the space each iteration. Quadruple covering might be possible using these mappings...



Logged




Timeroot


« Reply #7 on: January 29, 2010, 01:15:08 AM » 

Tglad,
I agree. I noticed some of your latest objects have Sierpinskilike qualities, too. What I learned from my discovery (which someone else probably found years ago) was that I used a scaling operation (times 2) and a translation (to the nearest vertex) and got a shape that still "conforms", i.e., angles & local shape are retained. So, the question is now that we can obtain a Sierpinski fractal from a Mandelbrot (or Julia)setlike generating algorithm, what other conformal mapping operations can we apply to this object to make it more interesting?
mike
I would also like to see Julia Sets of this too. I'm wondering if the filled Julia Set or the correct definition of the Julia Set (the points which never reaches a fixed point or periodic cycle) would be more appealing.



Logged

Someday, man will understand primary theory; how every aspect of our universe has come about. Then we will describe all of physics, build a complete understanding of genetic engineering, catalog all planets, and find intelligent life. And then we'll just puzzle over fractals for eternity.



msltoe
Iterator
Posts: 187


« Reply #8 on: January 29, 2010, 02:47:04 AM » 

Tglad: I agree that there are discontinuities. This may be resolved by smooth averaging over the nearest 3 vertices. Can you explain or show me the forum link to "quadruple covering"?
Timeroot: I think that the fixed point method would be better. When I take a crosssection of the above Sierpinski object, it's filled. I'll look into that...
I've been playing around with rotations using the simplest thing I could think of: the nonnormalized perpendicular axis (nx,ny,nz) is the crossproduct of the vertexorigin and (x,y,z)origin vectors. Here are two variations using the following formula: x = xv[jmin] 2*x + t*nx; y = yv[jmin] 2*y + t*ny; z = zv[jmin]  2*z + t*nz; where t=1 and t=2. This is not strictly a rotation but it provides nice results.



Logged




Tglad
Fractal Molossus
Posts: 703


« Reply #9 on: January 29, 2010, 05:32:49 AM » 

Wow, really starting to look interesting msltoe. Do you know whether these fractals are connected? Quadruple cover just means that, in the area of interest, 4 points will map to 1 point. In the mandelbrot 2 points map to 1. e.g. if Z^2=1 then Z is i or i. I think your fractals multicover the space anyway.



Logged




Tglad
Fractal Molossus
Posts: 703


« Reply #10 on: January 29, 2010, 10:20:59 AM » 

I don't know how to render with nice colour like your's, but here's a kind of similar fractal. if (point.x > 1) point.x = 2  point.x elseif (point.x < 1) point.x = 2  point.x endif if (point.y > 1) point.y = 2  point.y elseif (point.y < 1) point.y = 2  point.y endif if (point.z > 1) point.z = 2  point.z elseif (point.z < 1) point.z = 2  point.z endif point = point * k Vector diagonal = new Vector(1,1,1) diagonal.Normalise() float dot = point.Dot(diagonal) long.Multiply(corners[0], 2*dot) point = point  2*diagonal*dot ; now repeat the above point = point + C It reflects a cube around its six faces, then (to add interest) reflects along the diagonal (same as rotating 180 around the diagonal in fact), then scales. It is actually continuous and conformal, but doesn't lead to a connected fractal. Pics are for k = 1.5 and 2



Logged




kram1032


« Reply #11 on: January 30, 2010, 11:45:49 AM » 

really nice, all of them



Logged




M Benesi


« Reply #12 on: February 24, 2010, 05:28:48 AM » 

I altered it a bit (by changing signs at the bottom) and assign a lower minimum radius (1) to get the same fractals. Anyways... it was a total pain to code because allocating arrays kept on crashing me out, so I had to do it the hard way.. or easy way. or whatever: if (fractaltype=="Vertex") { rmin=fixedRadius; r=sqr(sx)+sqr(sy0.525731)+sqr(sz0.850651); if (r<rmin) { rmin=r; sx2=0;sy2=0.525731;sz2=0.850651; } r=sqr(sx)+sqr(sy+0.525731)+sqr(sz0.850651); if (r<rmin) { rmin=r; sx2=0;sy2=0.525731;sz2=0.850651; } r=sqr(sx)+sqr(sy0.525731)+sqr(sz+0.850651); if (r<rmin) { rmin=r; sx2=0;sy2=0.525731;sz2=0.850651; } r=sqr(sx)+sqr(sy+0.525731)+sqr(sz+0.850651); if (r<rmin) { rmin=r; sx2=0;sy2=0.525731;sz2=0.850651; } r=sqr(sx0.525731)+sqr(sy0.850651)+sqr(sz); if (r<rmin) { rmin=r; sx2=0.525731;sy2=0.850651;sz2=0; } r=sqr(sx+0.525731)+sqr(sy0.850651)+sqr(sz); if (r<rmin) { rmin=r; sx2=0.525731;sy2=0.850651;sz2=0; } r=sqr(sx0.525731)+sqr(sy+0.850651)+sqr(sz); if (r<rmin) { rmin=r; sx2=0.525731;sy2=0.850651;sz2=0; } r=sqr(sx+0.525731)+sqr(sy+0.850651)+sqr(sz); if (r<rmin) { rmin=r; sx2=0.525731;sy2=0.850651;sz2=0; } r=sqr(sx0.850651)+sqr(sy)+sqr(sz0.525731); if (r<rmin) { rmin=r; sx2=0.850651;sy2=0;sz2=0.525731; } r=sqr(sx+0.850651)+sqr(sy)+sqr(sz0.525731); if (r<rmin) { rmin=r; sx2=0.850651;sy2=0;sz2=0.525731; } r=sqr(sx0.850651)+sqr(sy)+sqr(sz+0.525731); if (r<rmin) { rmin=r; sx2=0.850651;sy2=0;sz2=0.525731; } r=sqr(sx+0.850651)+sqr(sy)+sqr(sz+0.525731); if (r<rmin) { rmin=r; sx2=0.850651;sy2=0;sz2=0.525731; } if (juliaMode) { sx=cr+2*sx  sx2; sy=ci+2*sy  sy2; sz=cj+2*sz sz2; } else { sx=pixelr+2*sx  sx2; sy=pixeli+2*sy  sy2; sz=pixelj+2*sz sz2; } bail=sx^2+sy^2+sz^2; }



Logged




