Logo by Fiery - Contribute your own Logo!

END OF AN ERA, FRACTALFORUMS.COM IS CONTINUED ON FRACTALFORUMS.ORG

it was a great time but no longer maintainable by c.Kleinhuis contact him for any data retrieval,
thanks and see you perhaps in 10 years again

this forum will stay online for reference
News: Check out the originating "3d Mandelbulb" thread here
 
*
Welcome, Guest. Please login or register. November 29, 2025, 12:08:55 PM


Login with username, password and session length


The All New FractalForums is now in Public Beta Testing! Visit FractalForums.org and check it out!


Pages: [1]   Go Down
  Print  
Share this topic on DiggShare this topic on FacebookShare this topic on GoogleShare this topic on RedditShare this topic on StumbleUponShare this topic on Twitter
Author Topic: [z*tan(z)]^7  (Read 1206 times)
0 Members and 1 Guest are viewing this topic.
mjk1093
Forums Freshman
**
Posts: 19



« on: March 27, 2010, 02:01:47 AM »



You really need to see this in hi-rez to do it justice: http://i.imgur.com/4z2ys.jpg
Logged
reesej2
Guest
« Reply #1 on: March 27, 2010, 02:43:15 AM »

Wow, very intricate. That equation looks like it's be time-consuming to render--was it?
Logged
mjk1093
Forums Freshman
**
Posts: 19



« Reply #2 on: March 27, 2010, 03:00:53 AM »

Nope, fast render. Nothing really time-consuming about trig or geometric functions. I'm not an expert but I think most of the "macho" renderings on here that take hours or even days to do are because they are really deep magnifications, not because of the functions. I could be wrong... if anyone more experienced reading this wants to share their expertise that would be great!
Logged
Power 8
Conqueror
*******
Posts: 147



WWW
« Reply #3 on: March 27, 2010, 04:50:59 AM »

Cool ! Very cellular and biological. What app did you use to render this?
Logged
mjk1093
Forums Freshman
**
Posts: 19



« Reply #4 on: March 27, 2010, 05:24:31 AM »

Yeah, I thought so too. Thanks! I used Ultra Fractal.
Logged
kram1032
Fractal Senior
******
Posts: 1863


« Reply #5 on: March 27, 2010, 12:11:34 PM »

looks great cheesy
Nice way to colour it!
Logged
aluminumstudios
Conqueror
*******
Posts: 135


« Reply #6 on: March 27, 2010, 04:37:33 PM »

Very biological, I like it a lot!
Logged
bib
Global Moderator
Fractal Senior
******
Posts: 2070


At the borders...


100008697663777 @bib993
WWW
« Reply #7 on: March 27, 2010, 08:18:13 PM »

if it was too quick to render, just add some anto-aliasing and the hi-res version will look even better smiley
Logged

Between order and disorder reigns a delicious moment. (Paul Valéry)
mjk1093
Forums Freshman
**
Posts: 19



« Reply #8 on: March 27, 2010, 10:27:02 PM »

If have heard this term before but I'm not sure what it is. What is it and how do you do it with Ultra Fractal?
Logged
bib
Global Moderator
Fractal Senior
******
Posts: 2070


At the borders...


100008697663777 @bib993
WWW
« Reply #9 on: March 27, 2010, 11:16:01 PM »

Anti aliasing is a method to smooth the sharp edges (pixel steps). When you render to disk, select an Anti-aliasing mode different than Off in the Anti-alisaing drop down.
Logged

Between order and disorder reigns a delicious moment. (Paul Valéry)
reesej2
Guest
« Reply #10 on: March 27, 2010, 11:44:50 PM »

Anti-aliasing tends to slow down rendering time, a lot, because the usual method is to calculate several points per pixel instead of just one. I don't know exactly how UF does it, though.
Logged
Pauldelbrot
Fractal Senior
******
Posts: 2592



pderbyshire2
« Reply #11 on: March 28, 2010, 03:18:48 AM »

It's a simple grid; the adaptive threshold makes it not oversample pixels not different enough from their neighbors. Unfortunately, that results in cutting off the tips of Mandelbrot valleys. The grid also makes it vulnerable to moire. Depth makes it further subdivide multiple times if the threshold is not met. 3x3, threshold 0.0, depth 2 on a 1024x768 image is equivalent to computing a non-antialiased 9216x6912 image and downsampling it to 1024x768.

It can be made not a grid with a transform like this one:

Code:
Jitter {
  ; Jitters the pixel coordinates slightly to kill moire.
global:
  float pixsize = 4*@jittermag/(#magn*#width)
transform:
   int x = trunc(real(#screenpixel)*1000)
   int y = trunc(imag(#screenpixel)*1000)
   int x2 = random(x * y - 45783456)
   int y2 = random(random(random(random(random((x - y)*(x + y) + 84358476)))))
   float xx = (random(random(random(random(x2))))*0.5/#randomrange)*pixsize
   float yy = (random(random(random(random(y2))))*0.5/#randomrange)*pixsize
   #pixel = #pixel + xx + (0,1)*yy
default:
  title = "Jitter"
  param jittermag
    caption = "Jitter magnitude (pixels)"
    default = 1.0
    min = 0.0
  endparam
}

This uses a noisy-but-deterministic function of the pixel coordinates (the *1000s are so even at 3x3 depth 4 this function will differ from one antialias sample point to the next) to perturb the calculation coordinates. With the default magnitude of 1.0 the perturbation is as much as half a pixel up or down and half a pixel left or right. The effect is for the antialiasing samples to be scattered randomly in and near the pixel instead of forming a neat grid.

Making the magnitude smaller moves the samples around less. If the antialiasing is 3x3 depth 4, there end up being 81 samples across and 81 down each pixel, so setting 0.02 will still fairly thoroughly smear away the grid while keeping the sample points mostly within the pixel and fairly smoothly distributed over its interior. Use 0.06 for depth 3, 0.18 for depth 2, and 0.5 for depth 1 for best moire-killing results.

The above only applies if using ultrafractal. Other tools (such as my own custom ones, or programs like ChaosPro) may do things differently and won't have the same way of specifying custom transforms (if they have any at all).

UF's transforms allow a few other hacks besides this one. Here's my favorite:

Code:
MandelSpeedup {
  ; Blots out the two largest parts of the Mandelbrot set.
  ; Speeds up Elephant Valley and Seahorse Valley.
transform:
  IF (|1 + sqrt(1 - 4*#pixel)| <= 1)
    #solid = true ; fixed point #1 is stable; inside cardioid
  ELSEIF (|1 - sqrt(1 - 4*#pixel)| <= 1)
    #solid = true ; fixed point #2 is stable; inside cardioid
  ELSEIF (|#pixel + 1| <= 0.0625)
    #solid = true ; inside period-2 bulb
  ELSE
    #pixel = #pixel
  ENDIF
default:
  title = "Mandelbrot Speedup"
}
    It masks off the cardioid and period-2 bulb of the M-set. Going for the hairier seahorses in between the regular ones along the valley wall, this can speed things up stupendously, particularly when you start having to use a maxiter of a billion or more. Of course it's useless if you want to color the interiors of these components of M, and it will not work for other fractals.

    The cardioid is tested for by seeing if either fixed point is stable. Any point with a stable cycle is in the interior of M. The fixed points are solutions to
z2 + c = z, of which there are two. A fixed point of z2 + c is stable if the derivative at that point, 2z, is within the unit disk; that means that the transformation z2 + c is contracting in a neighborhood of the fixed point, so a disk around the fixed point exists that contracts towards it, i.e. it's an attractor. (The test allows for equality, so gets the boundary of "indifferent" points as well; these still belong to M. In practice the only point exactly on the boundary likely to be hit precisely is 0.25, the very tip of Elephant Valley.)

The square-root expressions in the above code compute the roots of the fixed-point equation but double the answer by omitting to multiply in a factor of 1/2, thus yielding these derivatives. As it just so happens, the big cardioid of M is precisely the set of points where one (or both) of the fixed points is stable or indifferent.

The bulb is tested for in a far simpler manner: it is a perfectly circular disk of radius 0.25 centered on -1. The test against 0.0625 is because the ultrafractal || operator computes a squared modulus, so we need to test against 0.252 rather than against 0.25 itself (or take a square root, which seems less elegant).

In theory, a more general, massive speedup based upon this is possible in custom software:
  • As each pixel is encountered, apply all of an initially-empty set of component tests.
  • If a pixel is not found to be an interior point by testing, but is caught by periodicity logic, calculate the exact period.
  • Add to the component tests this period; the component tests are stored as a list of integers.
  • To apply a test for a particular period p, first find roots of (...(z2 + c)2 + c...)2 + c (p repetitions) via Newton's method or whatever, then iterate these points p times each accumulating a derivative (as is done for e.g. distance estimator calculations) and if any of these lies within the closed unit disk, halt and consider c to lie in M. If none of them does, go on to the next test, and if none of these pass, go on to the standard M-set iterations.
Each Newton iteration, and the derivative calc, will require about as much computation as 2p normal iterations. In practice, you'll need something better than Newton for finding "small-basin" roots if you want, say, that tiny period-47 minibrot and its even tinier buds to get sped up. (Anyone know a good method for enumerating all roots of a polynomial on the complex plane? You'd want to apply this to get rough approximations to all the roots, and then polish the roots with Newton.) All told you might need the equivalent of a few hundred or even a few thousand iterations per pixel. This would bog things down quickly if tests were naively added for every period seen computing an image; practically, you'd want it to track for each period seen how many pixels had that period and only if there were, say, 100 or more encountered, add a test for that period. You would also want to ignore large periods (e.g. over 100).

Smarter still might be to identify the specific root that's stable within a component. If you get say 10 pixels in a row with the same period and ending close to the same point, sample a few points of the image near there and see how the attractor moves; calculate a linear approximation to how one of the attractor points varies with c and test that point's stability. This will blank out a chunk of the component, perhaps a bigger chunk than the disk you could blow away using a distance estimate.
Logged

reesej2
Guest
« Reply #12 on: March 28, 2010, 06:31:31 AM »

Excellent suggestion. The only way I know of finding all of the roots of a polynomial is to Newton's-method it to find one, then divide that one out and repeat. Of course, this doesn't always work (sometimes Newton's method never converges, or takes an exceptionally long time to converge) and it's extremely slow. So something better would probably be needed, unless you're only going to want to deal with low-period bulbs.
Logged
Timeroot
Fractal Fertilizer
*****
Posts: 362


The pwnge.


WWW
« Reply #13 on: March 29, 2010, 01:38:36 AM »

Personally, I suspect that the shapes of the bulbs are all ellipses... it hasn't be confirmed, though, or (I think) shown false. For everything up the period-4 bulb, you can find the center exactly. For any higher order polynomial - unless it falls into some special case where it can be simplified - it cannot be solved exactly (this a proved fact). There are several ways for finding the solutions, though, approxamitely; Newton's method is the most common, but not always the best. You can use any of the Householder methods, you can use simple bisection (it works, and if the derivative is very difficult, it might be the fastest), you can use Halley's Irrational method (this is different from Halley's method)... they all work well. You could even extend Halley's irrational method to third or fourth order polynomials... probablly very inefficient, but it would be worth a try! grin
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.
Pages: [1]   Go Down
  Print  
 
Jump to:  


Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2015, Simple Machines

Valid XHTML 1.0! Valid CSS! Dilber MC Theme by HarzeM
Page created in 0.307 seconds with 25 queries. (Pretty URLs adds 0.013s, 2q)