This one binary searches for the surface of each component from its nucleus to far exterior in the direction of the target point. Finding the distance estimate in this solution is easy (just `length(point - nucleus) - length(surface - nucleus)`).

Finding the surface normal is harder: for circle-like components that become sphere-like the binary search ray direction is a close approximation, but cardioids are not sphere-like. One tangent is `i d/dz` at the boundary, but in the wrong frame... Mandel by Wolf Jung can do proper renormalization

will dig into its source code (GPL) soon

I implemented the attached with 3a multiplier map for hyperbolic components (page 15)

Later I will try to figure out 3b so I can also highlight the filaments that are owned by the mu-units.

Later still I'll try to use wakes to select one specific mu-unit, probably will try to highlight limbs first.

see also: (but I replicated the method behind this one (afaict, something to do with mapping the multiplier to the period 1 cardioid even outside the interior of the mu-unit's owning hyperbolic component) and the distortion of features is too great - there are halos around discs where the supposed mu-unit does not align with the true set shape).

refactored my bifurcation diagram (aka orbit diagram) generator to invoke ffmpeg itself, thus adding the ability to encode multiple segments for later seamless repetition to desired length. it's not true "infinite zoom", but a visually indistinguishable fake, and that's good enough for me.

also made it use the z:=z^2+c form, as the distortion of the x:=ax(1-x) form at low zoom levels was annoying me a lot.

these 3 videos rendered in 9mins at 640x360p25 with a density (average number of samples plotted per output pixel) of 1000. I have zoom outs too, and another set of 6 videos zooming to the period 3x island in antenna of period 3x island in antenna of ... limit point are still being rendered.

Looping animation made by sequencing key frames in the bifurcation diagram of the logistic map x := a x (1 - x), which is conjugate to the Mandelbrot set's quadratic polynomial x := x^2 + c.

The left hand edge of each keyframe is the parabolic root of a hyperbolic component (using jargon related to the Mandelbrot set). This can be found by Newton's method in 2 variables, starting from a nucleus of the relevant period (the animation starts 1, 2, 4, 8). The nucleus can be found by Newton's method in 1 variable, starting from a guess coordinate found by tracing external rays.

The right hand edge of each keyframe is a tuned / renormalized copy of the tip of the Mandelbrot antenna (c = -2 or a = 4). I found these coordinates by tracing external rays in the Mandelbrot set and then mapping c to a.

The top and bottom edges of the keyframes were found by iterating at the right hand edge and finding the two x that are closest (but not equal to) the starting point (the critical point x = 0.5). I think (not sure) these are at iteration numbers P and 2P, where P is the period of the "owning" hyperbolic component.

Interpolation between keyframes was done using Poincaré half-plane geodesics:

Feigenbaum constants are traditionally calculated for period doubling cascades, but they can also be calculated for period tripling cascades (p=3^k):

delta = limit of ratio of successive sizes of components ~= 55.24719485586328460
alpha = limit of ratio of succesive f_c^(3^{k-1})(0) ~= 9.277343959121408190
mu_infinity = limit of successive component centers ~= 3.854077963590777589

(almost surely not accurate to all digits, my calculation methods are susceptible to rounding errors and I used only machine native double precision, with 53 mantissa bits)

I used my mandelbrot-numerics library to compute these in the z:=z^2+c representation, the ratios transfer without alteration to the x:=rx(1-x) representation. transferring between c and r can be done by:
r = 1 + sqrt(1 - 4 * c)
c = (1 - (r - 1) ^ 2) / 4

the period tripling corresponds to this location in the Mandelbrot set:!q


playing around with rendering the bifurcation diagram of the logistic map x := a x (1 - x). only 128 lines of commented code.

using the two Feigenbaum constants for zoom in 'a' and 'x' and starting the zoom sufficiently deep, 'a' focused on the end of the first period-doubling cascade (and the critical point x=1/2), makes it loop almost perfectly.

there are two "zooms" in the animation, as "zooming once" flips it vertically.

(it would be a perfect loop approaching the limit of infinite zoom depth, but the number of points calculated that contribute to the view is inversely proportional to the height of visible 'x' , so you need to calculate ever more points when zooming deeper, which slows things down)

of course, the nanomb2 algorithm (aka "super series approximation") does work sometimes, and when it does it is often much faster than the older series approximation algorithm, which in turn is much faster than perturbation iterations alone, which in turn is much faster than using plain iteration with high precision numbers for each pixel

the algorithm works by approximating the orbit near a periodic cycle (usually a minibrot island) by a polynomial in *two* variables representing small changes in C and Z. you end up with a polynomial that does P iterations at once (a "super iteration"), where P is the period of the cycle.

this polynomial is only valid while dC and dZ are small, but when they get big you can switch to a different polynomial corresponding to a nearby less zoomed in minibrot of lower period. one "super-iteration" takes longer than one perturbation iteration or one plain iteration, but you need far fewer, so it works out faster.

combined with interior checking, you can set the iteration count exceedingly high (100100100 is routine for me now) with little-to-no slowdown, and get super-crisp minibrot boundaries

new feature release of kalle's fraktaler 2.14 (development) branch

- new feature: nanomb2 algorithm for power 2 Mandelbrot (experimental) (originally by knighty)
- new feature: display Newton period (and set limit for nanomb2 algorithm) in Location dialog
- new feature: Ctrl-Shift-W shortcut to set image size (suggested by gerrit)
- bugfix: distinguish dialog titles for set window size and set image size
- bugfix: fix corrupt images when zooming out from the default view
- new feature: dialogs to en/disable derivatives when opening file with/out
analytic DE; automatically enabling derivatives if needed in CLI mode (reported by gerrit)
- default zoom size changed from 4 to 2 (press Ctrl-4 to reset to 4, or load a settings file with your preference) (suggested by gerrit, to avoid the dreaded "zoom size is not 2" warning when saving zoom out sequence).
- merged changes from 2.13.11

(experimental means sometimes images are bad, like the attached)

ported the glass/quartz/water models from my prismatic thingy to this new thing. so much noise though :(

I refactored my raytracer, no more non-deliberate glitches.

Some bugs with diffuse and transparent (refractive) objects remain, but the main issue is the excess noise on diffuse objects. Monte-Carlo O(sqrt(N)) quality is a bit ann0yment.

Thin film irridescence renders very quickly with very smooth gradients, because there is no random scattering. Halton sequence sampling gets good spectral and subpixel coverage without issue. The nested reflections look confusing I think the shape is in fact not buggy.

Someone pointed me towards Halton sequences for low-discrepancy pseudo number generation. The difference compared to Burtle integer independent uniform is quite large, here is an image excerpt rendered with 64 samples, the top half uses independent uniform randoms and the bottom half low-discrepancy randoms.

deliberately glitching it gives interesting results (reduce number of ray steps very low, increase ray depth very high, increase the acne avoidance value to absurd levels)

something is wrong with my menger sponge

experimenting with simulating b/w film spectral sensitivity

experimenting with spectral raytracing

Working on a very simple ray-tracer in FragM 2.5. Want to try for something physically accurate.

So far the only reflectance model is diffuse, with reflected rays being chosen uniformly at random in the hemisphere about the surface normal. The ambient occlusion in the animation is emergent from this simple rule, no adhoc hacks.

I got some weird banding in earlier versions, fixed that by always marching the ray to its maximum step count, instead of bailing early if "near" a surface.

saved some images of work in progress (earlier versions took much less time to render, a few minutes)

here's a comparable image withe buddhabrot of the Mandelbrot set - it seems like it fades out, but long orbits are rare so its not so easy to be sure. I have an open M.SE question about this for some time...

this is the total contribution of orbits of length between 2^n and 2^{n+1}. Coloured with log scaling, the true contrast between start and end is much more dramatic. Looks not converging...

Show more

Welcome to, an instance for discussions around cultural freedom, experimental, new media art, net and computational culture, and things like that. This is part of a family of services that include mailing lists, group chat, and XMPP.