跳转到内容

分形/emndl

来自维基教科书,开放的世界,开放的书籍

emndl 是克劳德·海兰德-艾伦的程序:指数 曼德勃罗集的可视化输出选项包括

  • 高瘦的图像
  • 通过反转坐标变换,由图像条制作的缩放视频


emndl_autotune

  • 尝试在曼德勃罗集找到可能看起来不错的有趣点
  • 在 Haskell 中实现
  • 目前需要使用 integer-simple(不是默认的 integer-gmp)构建的 GHC,以便 MPFR 绑定正常工作

先决条件

  • 用于构建大多数程序
    • gcc
    • g++
    • libqd-dev - C++ 和 F90 中的双双精度和四精度类型
  • 用于构建 emndl_autotune
    • ghc
    • cabal
  • 用于运行
    • bash
    • getopt (GNU)
    • bc
  • imagemagick -- 用于图像输出
  • 用于 DVD 输出
    • y4mscaler 是一种视频缩放器,它对 YUV4MPEG2 流进行操作,如 MJPEGtools 项目 中的工具所使用。
    • mpeg2enc - 使用 mjpegtools 库将原始视频编码为 MPEG-1/2 基本流。
  • ffmpeg -- 用于 mkv 输出
  • ffmpeg2theora -- 用于 ogv 输出
  • ecasound, puredata -- 用于视频配乐


对于 emndl

 git clone	https://code.mathr.co.uk/emndl.git 
 cd emndl
 make

对于 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
./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

坐标


emndl_2018-08-03T11-23-16.mkv 的坐标

REALCOORD=-1.2502259692930972582217787794367516384674267311920345554701091121819451616288474903375439125840028505381241666e+00
IMAGCOORD=-3.42180858457804363065272789355461346156675050268516641110743928004962993736897391706380916640147746335618768713e-01
PERIOD=396
MAXITERS=100100
SIZE=7.5089502353440369e-38

emndl_vs_nanomb_2018-08-03(在 archive.org 上)的坐标

REALCOORD=2.32881715984171619523670105543682540038728554391151374122585121905032044832510538073674973239588027974526386357263542756141209509076915793136483409366732770101220857708891025180202484778852216373074628804662000573668390738172817193728347860445256777791916983537169476478249277392675920481935444775336796e-02
IMAGCOORD=8.15519594089994179859195278340598576447528880907449779065614659131971532215140192176068680822666750642391111578468988890742131839375371458052054010234250333939153906090539688498799065846221616933966400388040076657090140783996781080255541492455790725921287002240432954348425982356238830635005863927114069e-01
PERIOD=26079
MAXSUPERITERS=1000
SIZE=1.9302144566912991e-298

第一个示例

[编辑 | 编辑源代码]
./emndl.sh --quality 7 --png --jpeg --re -1.241733127596417466318604 --im -0.1698965841028383922879327

结果

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

第二个

[编辑 | 编辑源代码]
 ./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

第三个

[编辑 | 编辑源代码]
 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



自动调整

[编辑 | 编辑源代码]
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

指数映射

[编辑 | 编辑源代码]
 c = c0 + cexp(x + i y) 
 x + i y = clog(c - c0)

缩放 2pi/width

以下是代码的相关部分

// 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 }
  • 克劳德的坠入曼德勃罗集(360 度测试) 一个有转折的分形缩放。从黎曼球体内投影,图像从下方展开并滚动经过,然后收缩到头顶。这是一个第一次测试,有一些缺陷,比如糟糕的纹理贴图级别曲线。渲染时间 6 小时。坐标
    • Cx = -1.76915100313963348631585617219113282419006284180146489000041
    • cyu = +0.00558166050979690182753149300394271544944337923388479000001i
    • @ 1e-21(缩放)
  • 克劳德的错位奶油甜甜圈(Dinkydau) 和原始页面 DinkydauSet 的错位奶油甜甜圈
    • 视频:360 度曼德勃罗集分形缩放,缩放至 Dinkydau 的“错位奶油甜甜圈”位置中心的迷你曼德勃罗集。使用 'emndl' 渲染,使用了 knighty 的 'nanomb2' 中的算法。

参考文献

[编辑 | 编辑源代码]
华夏公益教科书