Fractals/emndl
Appearance
< Fractals
Programs
[edit | edit source]emndl it is the program by Claude Heiland-Allen: exponential strip visualisation of the Mandelbrot set Output options include:
- tall thin images
- zoom videos made from the image strips by inverting the coordinate transformation
emndl_autotune
- attempts to find interesting points in the Mandelbrot Set that might look nice
- is implemented in Haskell
- currently requires a GHC built with integer-simple (not the default integer-gmp) so that the MPFR bindings work correctly
instal
[edit | edit source]prerequisites
- for building most programs
- gcc
- g++
- libqd-dev - Double-double and quad double types in C++ and F90
- for building emndl_autotune
- ghc
- cabal
- for running
- bash
- getopt (GNU)
- bc
- imagemagick -- for image output
- for dvd output
- y4mscaler is a video scaler which operates on YUV4MPEG2 streams, as used by the tools in the MJPEGtools project.
- mpeg2enc - encodes raw video into an MPEG-1/2 elementary stream using the mjpegtools library.
- ffmpeg -- for mkv outpout
- ffmpeg2theora -- for ogv output
- ecasound, puredata -- for video soundtracks
For emndl:
git clone https://code.mathr.co.uk/emndl.git cd emndl make
For emndl_autotune
cabal update cabal install --lib Vec cabal install --lib hmpfr make emndl_autotune ghc -O3 -Wall -threaded -rtsopts -fspec-constr-count=50 -package Vec -package hmpfr -package parallel -package reflection -package random -package ad --make emndl_autotune.hs
help
[edit | edit source]./emndl.sh --help usage options: --help -h -? show this message and exit --version show version and exit input options: --auto bits find an interesting point with precision 'bits' --re real choose coordinates --im imag --period p --maxiters n --size sz render options: --quality q horizontal size, (5 - 12) image options: --png generate full size PNG --jpeg generate thumbnail JPEG video options: --aspect w:h output aspect (4:3, 16:9) --speed s zoom speed (default 1) --dvd generate PAL DVD (SD) --mkv generate Matroska (HD) --ogv generate Theora (LD) other options: --quiet less output --verbose more output
coordinate
[edit | edit source]
coordinate for emndl_2018-08-03T11-23-16.mkv
REALCOORD=-1.2502259692930972582217787794367516384674267311920345554701091121819451616288474903375439125840028505381241666e+00 IMAGCOORD=-3.42180858457804363065272789355461346156675050268516641110743928004962993736897391706380916640147746335618768713e-01 PERIOD=396 MAXITERS=100100 SIZE=7.5089502353440369e-38
coordinates for emndl_vs_nanomb_2018-08-03 (on archive.org):
REALCOORD=2.32881715984171619523670105543682540038728554391151374122585121905032044832510538073674973239588027974526386357263542756141209509076915793136483409366732770101220857708891025180202484778852216373074628804662000573668390738172817193728347860445256777791916983537169476478249277392675920481935444775336796e-02 IMAGCOORD=8.15519594089994179859195278340598576447528880907449779065614659131971532215140192176068680822666750642391111578468988890742131839375371458052054010234250333939153906090539688498799065846221616933966400388040076657090140783996781080255541492455790725921287002240432954348425982356238830635005863927114069e-01 PERIOD=26079 MAXSUPERITERS=1000 SIZE=1.9302144566912991e-298
run
[edit | edit source]first example
[edit | edit source]./emndl.sh --quality 7 --png --jpeg --re -1.241733127596417466318604 --im -0.1698965841028383922879327
Result
AUTO=0 AUTOBITS=128 REAL=1 REALCOORD=-1.241733127596417466318604 IMAG=1 IMAGCOORD=-0.1698965841028383922879327 PER=0 PERIOD=1 MAXITERS=1000 SZ=0 SIZE=1 QUALITY=7 PNG=1 JPEG=1 ASPECT=16:9 SPEED=1 DVD=0 MKV=0 OGV=0 VERBOSE=1 WIDE=1 WIDTH=128 VWIDTH=128 VHEIGHT=72 E=/home/a/emndl OUT=emndl_2022-11-20T19:47:29+01:00 calculating.. Atom domain: period: 1 zmag: 1.2533 HC centre: (1.24173,0.169897) (relative to location) Esc R(new):1e+29 Esc R(old):1e+30 Precision: 7 ----------------------------------------------- __(-1.24173,-0.169897) i: 0 j: 0 val: (-1.24173,-0.169897) i: 0 j: 1 val: (1,0) i: 0 j: 2 val: (0,0) i: 0 j: 3 val: (0,0) i: 0 j: 4 val: (0,0) i: 0 j: 5 val: (0,0) i: 0 j: 6 val: (0,0) i: 0 j: 7 val: (0,0) i: 0 j: 8 val: (0,0) ----------------------- ... ----------------------- i: 16 j: 0 val: (0,0) i: 16 j: 1 val: (0,0) i: 16 j: 2 val: (0,0) i: 16 j: 3 val: (0,0) i: 16 j: 4 val: (0,0) i: 16 j: 5 val: (0,0) i: 16 j: 6 val: (0,0) i: 16 j: 7 val: (0,0) i: 16 j: 8 val: (0,0) ----------------------- R == 1e+30 NOTICE: precision is sufficient: 7 <= 64 finalizing..e scanline 326 / 326 equalizing.. computing depth.. DEPTH=2 downscaling.. colourizing.. making images.. making videos.. making soundtrack.. 2022-11-20T19:47:29+01:00 begin 2022-11-20T19:47:30+01:00 end
second
[edit | edit source]./emndl.sh --quality 10 --png --jpeg --dvd --ogv --re -0.5988529658460445113700557999169873572638106766467118517477 --im -0.6627873418981974683919856287279365042423603984338094007074
AUTO=0 AUTOBITS=128 REAL=1 REALCOORD=-0.5988529658460445113700557999169873572638106766467118517477 IMAG=1 IMAGCOORD=-0.6627873418981974683919856287279365042423603984338094007074 PER=0 PERIOD=1 MAXITERS=1000 SZ=0 SIZE=1 QUALITY=10 PNG=1 JPEG=1 ASPECT=16:9 SPEED=1 DVD=1 MKV=0 OGV=1 VERBOSE=1 WIDE=1 WIDTH=1024 VWIDTH=960 VHEIGHT=540 E=/home/a/emndl OUT=emndl_2022-11-20T19:54:31+01:00 calculating.. Atom domain: period: 1 zmag: 0.893259 HC centre: (0.598853,0.662787) (relative to location) Esc R(new):1e+29 Esc R(old):1e+30 Precision: 9 ----------------------------------------------- __(-0.598853,-0.662787) i: 0 j: 0 val: (-0.598853,-0.662787) i: 0 j: 1 val: (1,0) i: 0 j: 2 val: (0,0) i: 0 j: 3 val: (0,0) i: 0 j: 4 val: (0,0) i: 0 j: 5 val: (0,0) i: 0 j: 6 val: (0,0) i: 0 j: 7 val: (0,0) i: 0 j: 8 val: (0,0) ----------------------- ... ----------------------- i: 16 j: 0 val: (0,0) i: 16 j: 1 val: (0,0) i: 16 j: 2 val: (0,0) i: 16 j: 3 val: (0,0) i: 16 j: 4 val: (0,0) i: 16 j: 5 val: (0,0) i: 16 j: 6 val: (0,0) i: 16 j: 7 val: (0,0) i: 16 j: 8 val: (0,0) ----------------------- R == 1e+30 NOTICE: precision is sufficient: 9 <= 64 finalizing..e scanline 2608 / 2608 equalizing.. computing depth.. DEPTH=2 downscaling.. colourizing.. making images.. making videos.. ./emndl.sh: linia 260: y4mscaler: nie znaleziono polecenia ./emndl.sh: linia 261: mpeg2enc: nie znaleziono polecenia making soundtrack.. ./emndl.sh: linia 279: ecasound: nie znaleziono polecenia ./emndl.sh: linia 282: pd: nie znaleziono polecenia ./emndl.sh: linia 292: twolame: nie znaleziono polecenia ./emndl.sh: linia 306: oggenc: nie znaleziono polecenia ./emndl.sh: linia 293: mplex: nie znaleziono polecenia ./emndl.sh: linia 307: oggz-merge: nie znaleziono polecenia 2022-11-20T19:54:31+01:00 begin 2022-11-20T19:54:48+01:00 end
third
[edit | edit source]export LD_LIBRARY_PATH=${HOME}/opt/lib export PATH=${HOME}/opt/bin:${PATH} ./emndl.sh --auto 96 --png --jpeg 12 1 0.0000e+00 0.0000e+00 7.50000000e-01 20 5 -4.4212341e-02 9.8658085e-01 2.54836585e-03 36 21 -4.08647509785e-02 9.82536914715e-01 4.88178316e-08 62 115 -4.0864860818013505432e-02 9.8253687241578015568e-01 7.76448686e-16 98 596 -4.086486081801155519398814148626e-02 9.825368724157807120516621196188e-01 1.02641550e-26 AUTO=1 AUTOBITS=96 REAL=0 REALCOORD=-4.086486081801155519398814148626e-02 IMAG=0 IMAGCOORD=9.825368724157807120516621196188e-01 PER=0 PERIOD=596 MAXITERS=1000 SZ=0 SIZE=1.3685540417099322e-26 QUALITY=8 PNG=1 JPEG=1 ASPECT=16:9 SPEED=1 DVD=0 MKV=0 OGV=0 VERBOSE=1 WIDE=1 WIDTH=256 VWIDTH=256 VHEIGHT=144 E=/home/a/emndl OUT=emndl_2022-11-23T18:42:44+01:00 calculating.. Atom domain: period: 1 zmag: 0.983386 HC centre: (0.0408649,-0.982537) (relative to location) Esc R(new):1e+29 Esc R(old):1e+30 Precision: 7 ----------------------------------------------- Atom domain: period: 5 zmag: 0.0821434 HC centre: (-0.0033475,0.0040441) (relative to location) Esc R(new):0.0129093 Esc R(old):0.129093 Precision: 15 ----------------------------------------------- Atom domain: period: 21 zmag: 0.000401242 HC centre: (1.0984e-07,4.23041e-08) (relative to location) Esc R(new):5.29777e-05 Esc R(old):0.000529777 Precision: 15 ----------------------------------------------- Atom domain: period: 115 zmag: 4.75912e-08 HC centre: (-1.95024e-15,-5.56367e-16) (relative to location) Esc R(new):7.04258e-10 Esc R(old):7.04258e-09 Precision: 16 ----------------------------------------------- Atom domain: period: 596 zmag: 5.78401e-18 HC centre: (-9.69691e-32,-9.40874e-31) (relative to location) Esc R(new):1.34034e-17 Esc R(old):1.34034e-16 Precision: 16 ----------------------------------------------- __(3.43351e-18,4.65465e-18) i: 0 j: 0 val: (3.43351e-18,4.65465e-18) i: 0 j: 1 val: (5.26731e+12,-3.10641e+12) i: 0 j: 2 val: (2.27498e+28,-3.95469e+28) i: 0 j: 3 val: (8.00832e+41,-2.21767e+44) i: 0 j: 4 val: (-3.90043e+59,-6.85294e+59) i: 0 j: 5 val: (-1.88333e+75,-1.10284e+75) i: 0 j: 6 val: (-4.88467e+90,-2.09717e+88) i: 0 j: 7 val: (-7.86231e+105,4.50434e+105) i: 0 j: 8 val: (-7.22294e+120,1.21745e+121) ----------------------- i: 1 j: 0 val: (0,0) i: 1 j: 1 val: (0,0) i: 1 j: 2 val: (0,0) i: 1 j: 3 val: (0,0) i: 1 j: 4 val: (0,0) i: 1 j: 5 val: (0,0) i: 1 j: 6 val: (0,0) i: 1 j: 7 val: (0,0) i: 1 j: 8 val: (0,0) ----------------------- i: 2 j: 0 val: (1.16559e+13,-2.63086e+12) i: 2 j: 1 val: (1.32558e+29,-1.18897e+29) i: 2 j: 2 val: (4.17497e+44,-1.22718e+45) i: 2 j: 3 val: (-1.13749e+60,-6.02728e+60) i: 2 j: 4 val: (-1.36998e+76,-1.61469e+76) i: 2 j: 5 val: (-5.33318e+91,-1.93651e+91) i: 2 j: 6 val: (-1.20729e+107,2.06746e+106) i: 2 j: 7 val: (-1.69961e+122,1.36808e+122) i: 2 j: 8 val: (-1.33031e+137,2.97704e+137) ----------------------- i: 3 j: 0 val: (0,0) i: 3 j: 1 val: (0,0) i: 3 j: 2 val: (0,0) i: 3 j: 3 val: (0,0) i: 3 j: 4 val: (0,0) i: 3 j: 5 val: (0,0) i: 3 j: 6 val: (0,0) i: 3 j: 7 val: (0,0) i: 3 j: 8 val: (0,0) ----------------------- i: 4 j: 0 val: (1.58875e+29,-7.00615e+28) i: 4 j: 1 val: (1.52864e+45,-2.0086e+45) i: 4 j: 2 val: (2.54531e+60,-1.7701e+61) i: 4 j: 3 val: (-2.95186e+76,-7.66605e+76) i: 4 j: 4 val: (-2.11528e+92,-1.74947e+92) i: 4 j: 5 val: (-6.9792e+107,-1.2693e+107) i: 4 j: 6 val: (-1.3956e+123,4.64333e+122) i: 4 j: 7 val: (-1.77273e+138,1.77606e+138) i: 4 j: 8 val: (-1.5096e+153,3.32683e+153) ----------------------- i: 5 j: 0 val: (0,0) i: 5 j: 1 val: (0,0) i: 5 j: 2 val: (0,0) i: 5 j: 3 val: (0,0) i: 5 j: 4 val: (0,0) i: 5 j: 5 val: (0,0) i: 5 j: 6 val: (0,0) i: 5 j: 7 val: (0,0) i: 5 j: 8 val: (0,0) ----------------------- i: 6 j: 0 val: (1.3519e+45,-9.23641e+44) i: 6 j: 1 val: (1.05008e+61,-2.06423e+61) i: 6 j: 2 val: (-5.24778e+75,-1.59172e+77) i: 6 j: 3 val: (-3.62984e+92,-6.07839e+92) i: 6 j: 4 val: (-1.97052e+108,-1.14993e+108) i: 6 j: 5 val: (-5.66073e+123,-1.94389e+122) i: 6 j: 6 val: (-1.02695e+139,4.62395e+138) i: 6 j: 7 val: (-1.34514e+154,1.31384e+154) i: 6 j: 8 val: (-1.9291e+169,2.43431e+169) ----------------------- i: 7 j: 0 val: (0,0) i: 7 j: 1 val: (0,0) i: 7 j: 2 val: (0,0) i: 7 j: 3 val: (0,0) i: 7 j: 4 val: (0,0) i: 7 j: 5 val: (0,0) i: 7 j: 6 val: (0,0) i: 7 j: 7 val: (0,0) i: 7 j: 8 val: (0,0) ----------------------- i: 8 j: 0 val: (8.03788e+60,-7.85714e+60) i: 8 j: 1 val: (4.56251e+76,-1.47389e+77) i: 8 j: 2 val: (-2.02153e+92,-1.0065e+93) i: 8 j: 3 val: (-2.81953e+108,-3.37907e+108) i: 8 j: 4 val: (-1.26107e+124,-5.16602e+123) i: 8 j: 5 val: (-3.24269e+139,1.97294e+138) i: 8 j: 6 val: (-5.84003e+154,2.49333e+154) i: 8 j: 7 val: (-1.04573e+170,6.14084e+169) i: 8 j: 8 val: (-2.51583e+185,1.6916e+185) ----------------------- i: 9 j: 0 val: (0,0) i: 9 j: 1 val: (0,0) i: 9 j: 2 val: (0,0) i: 9 j: 3 val: (0,0) i: 9 j: 4 val: (0,0) i: 9 j: 5 val: (0,0) i: 9 j: 6 val: (0,0) i: 9 j: 7 val: (0,0) i: 9 j: 8 val: (0,0) ----------------------- i: 10 j: 0 val: (3.52949e+76,-4.82147e+76) i: 10 j: 1 val: (1.11202e+92,-7.85671e+92) i: 10 j: 2 val: (-1.74272e+108,-4.78352e+108) i: 10 j: 3 val: (-1.54592e+124,-1.41788e+124) i: 10 j: 4 val: (-5.96547e+139,-1.84904e+139) i: 10 j: 5 val: (-1.46932e+155,5.06642e+153) i: 10 j: 6 val: (-3.26863e+170,5.36225e+169) i: 10 j: 7 val: (-9.21875e+185,2.22567e+185) i: 10 j: 8 val: (-2.62545e+201,1.53132e+201) ----------------------- i: 11 j: 0 val: (0,0) i: 11 j: 1 val: (0,0) i: 11 j: 2 val: (0,0) i: 11 j: 3 val: (0,0) i: 11 j: 4 val: (0,0) i: 11 j: 5 val: (0,0) i: 11 j: 6 val: (0,0) i: 11 j: 7 val: (0,0) i: 11 j: 8 val: (0,0) ----------------------- i: 12 j: 0 val: (1.17508e+92,-2.26762e+92) i: 12 j: 1 val: (-1.48869e+106,-3.27023e+108) i: 12 j: 2 val: (-9.24682e+123,-1.79275e+124) i: 12 j: 3 val: (-6.31679e+139,-4.91195e+139) i: 12 j: 4 val: (-2.23303e+155,-7.73627e+154) i: 12 j: 5 val: (-6.32356e+170,-1.31143e+170) i: 12 j: 6 val: (-2.14638e+186,-2.53377e+185) i: 12 j: 7 val: (-7.73712e+201,1.39915e+201) i: 12 j: 8 val: (-2.09628e+217,1.50196e+217) ----------------------- i: 13 j: 0 val: (0,0) i: 13 j: 1 val: (0,0) i: 13 j: 2 val: (0,0) i: 13 j: 3 val: (0,0) i: 13 j: 4 val: (0,0) i: 13 j: 5 val: (0,0) i: 13 j: 6 val: (0,0) i: 13 j: 7 val: (0,0) i: 13 j: 8 val: (0,0) ----------------------- i: 14 j: 0 val: (2.99288e+107,-8.48534e+107) i: 14 j: 1 val: (-1.37995e+123,-1.09929e+124) i: 14 j: 2 val: (-3.4462e+139,-5.61505e+139) i: 14 j: 3 val: (-1.99107e+155,-1.67848e+155) i: 14 j: 4 val: (-7.56544e+170,-4.85276e+170) i: 14 j: 5 val: (-3.22153e+186,-1.64147e+186) i: 14 j: 6 val: (-1.50281e+202,-2.57623e+201) i: 14 j: 7 val: (-5.47944e+217,1.52875e+217) i: 14 j: 8 val: (-1.31202e+233,1.2574e+233) ----------------------- i: 15 j: 0 val: (0,0) i: 15 j: 1 val: (0,0) i: 15 j: 2 val: (0,0) i: 15 j: 3 val: (0,0) i: 15 j: 4 val: (0,0) i: 15 j: 5 val: (0,0) i: 15 j: 6 val: (0,0) i: 15 j: 7 val: (0,0) i: 15 j: 8 val: (0,0) ----------------------- i: 16 j: 0 val: (5.9467e+122,-2.59355e+123) i: 16 j: 1 val: (-6.03661e+138,-3.10484e+139) i: 16 j: 2 val: (-9.10047e+154,-1.64806e+155) i: 16 j: 3 val: (-5.1965e+170,-7.04042e+170) i: 16 j: 4 val: (-2.99237e+186,-3.23487e+186) i: 16 j: 5 val: (-1.9257e+202,-1.09749e+202) i: 16 j: 6 val: (-9.57639e+217,-7.39729e+216) i: 16 j: 7 val: (-3.20512e+233,1.40031e+233) i: 16 j: 8 val: (-6.68272e+248,8.50103e+248) ----------------------- R == 1.34034e-16 NOTICE: precision is sufficient: 16 <= 64 finalizing..e scanline 3078 / 3078 equalizing.. computing depth.. DEPTH=12 downscaling.. colourizing.. making images.. making videos.. making soundtrack.. 2022-11-23T18:42:44+01:00 begin 2022-11-23T18:43:07+01:00 end
autotune
[edit | edit source]emndl_autotune +RTS -N -RTS 80 P 1 R 0.0 I 0.0 @ 1 ▄ ▄ ███ ▄███▄ ▄ ███████████▄█▀ ███████████████▄ ▄▄▄ ▄█████████████████ ▄█████▄ █████████████████ ▄▄▄▄▄▄▄▄▄▄▄█▄███████▄████████████████▀ ▀ ███████ █████████████████ ███▀▀ █████████████████▄ ████████████████▀ ▀▀█████████████ ▀▀▀▀█████▀█ ▀▀ ███ ▀█▀ ▄ P 4 R -0.1565201668337550617989867 I -1.032247108922831801671601 @ 8.2966360777899879795193e-3 ▄▄▄ █▄ ████▄███████▄█ ▀█████████████ ███████████████ ▄▄███████████████▄▄ ██████████████████▄ ▀███████████████████▀ ███████████████████▄ ▄▄ ██████████████████▀ ▄▄████████████████████▀▀ ████████ ▀███████████▄▄ ▄██████▀ ▀▀▀█▀▀ ▀██ ▀▀▀▀▀█ P 31 R -0.1534817415674078270901370 I -1.030177111803473792344760 @ 2.261921892899238897e-7 -0.1534817415674078270901370 -1.030177111803473792344760 5
exponential map
[edit | edit source] c = c0 + cexp(x + i y)
x + i y = clog(c - c0)
with scaling by 2pi/width
Here are the relevant parts of the code:
// emndl_calculate.cc
N progress = 0;
907 #pragma omp parallel for schedule(dynamic)
908 for (N y = 0; y < height; ++y)
909 {
910 for (N x = 0; x < width; ++x)
911 {
912 R_lo t0 = (x + jitter(x, y, 0)) / width * 2 * pi;
913 R_lo c0 = cosl(t0);
914 R_lo s0 = sinl(t0);
915 R_lo t1 = (x + jitter(x, y, 0) + 1) / width * 2 * pi;
916 R_lo c1 = cosl(t1);
917 R_lo s1 = sinl(t1);
918 R_lo l0 = (y + jitter(x, y, 1)) / width * 2 * pi;
919 R_lo r0 = expl(8 - l0);
920 C_lo dc(r0 * c0, r0 * s0);
921 C_lo dc1(r0 * c1, r0 * s1);
922 R_lo pixel_spacing = sqrtl(norm(dc1 - dc));
923 N si(0);
924 int iters = 0;
925 float trans = 0.0f;
926 //we need to send the nucleus position wrt the center of the picture.
927 R_lo v = iteratePtDE1( dc, SSAs, ref, maxsi, maxiters, si, iters, trans);//
928 //R_lo v = iteratePtDE( dc, fp, ref, period, maxiters, Bout, si, iters, trans);
929
930 float dwell = v <= 0 ? -1 : 16 + iters + trans;
931 float distance = fabsl(v / pixel_spacing);
932 float angle = 0;
933 float isperiod = 0;
934 float isnewton = 0;
935 float *result = buffer + size_t(y) * width * CHANNELS + x * CHANNELS;
936 result[0] = dwell;
937 result[1] = distance;
938 result[2] = angle;
939 result[3] = isperiod;
940 result[4] = isnewton;
941
942 }
943 #pragma omp critical
944 cerr << "\timage scanline " << ++progress << " / " << height << "\r";
945 }
946 }
// emndl_unwarp.c
float h = 1.0 / sqrt(ow * ow + oh * oh);
141 float k = img->width / 8.0;
142 float dy = speed * k / 25.0;
143 for (float y0 = 0; y0 < img->height - img->width; y0 += dy) {
144 {
145 int j;
146 int i; float p, q, d, x, y, l; int c;
147 #pragma omp parallel for private(i, p, q, d, x, y, l, c)
148 // schedule(static, 1)
149 for (j = 0; j < oh; ++j) {
150 for (i = 0; i < ow; ++i) {
151 p = (i - (ow >> 1) + 0.5f) * h;
152 q = ((oh >> 1) - j - 0.5f) * h;
153 d = (logf(sqrtf(p * p + q * q)) * 0.15915494309189535f) * img->width;
154 x = (atan2f(-q, -p) * 0.15915494309189535f + 0.5f) * img->width;
155 y = y0 - d;
156 l = - log2f(sqrtf(p * p + q * q)) - 2;
157 for (c = 0; c < 3; ++c) {
158 out[(j * ow + i) * 3 + c] = clamp(pixel2(img, l, y, x, c) * 255, 0, 255);
159 }
160 }
161 }
162 }
163 if (1 != fwrite(header, strlen(header), 1, stdout)) exit(2);
164 if (1 != fwrite(out, ow * oh * 3, 1, stdout)) exit(3);
165 {
166 float l = -log2(img->width / 960.0);
167 for (int s = 0; s < 1920; ++s) {
168 for (int c = 0; c < 2; ++c) {
169 float x = fmod(s / 960.0 + 0.5 * c, 1) * img->width;
170 float y = y0 + dy * (s / 1920.0);
171 float a = pixel2(img, l, y, x, 0) + pixel2(img, l, y, x, 1) + pixel2(img, l, y, x, 2);
172 au[2 * s + c] = a / 3.0 - 0.5;
173 }
174 }
175 }
176 if (1 != fwrite(au, 1920 * 2 * sizeof(float), 1, stderr)) exit(6);
177 }
178 return 0;
179 }
video
[edit | edit source]- falling into Mandelbrot (360 test) by Claude A fractal zoom with a twist. Projecting from inside the Riemann sphere, the image expands from below and scrolls past to contract overhead. This is a first test, there are some imperfections like bad mipmap level curves. Render time 6 hours. Coordinates:
- Cx = -1.76915100313963348631585617219113282419006284180146489000041
- cyu = +0.00558166050979690182753149300394271544944337923388479000001i
- @ 1e-21 ( zoom)
- Misaligned Butterdonut (Dinkydau) by Claude and original page Misaligned Butterdonut by DinkydauSet
- video: 360 Mandelbrot fractal zoom to the mini-Mandelbrot-set at the center of Dinkydau's "Misaligned Butterdonut" location. Rendered with 'emndl' using algorithms from knighty's 'nanomb2'.