本帖最后由 aa77dd@163.com 于 2015-7-14 15:42 编辑
近似算法, 以下是迭代上限 MaxRepeats 设为 30 次得到的图像
如果将 MaxRepeats 的值设小一些, 耗时会减短, 但结果的近似程度相应会更差 | @echo off & setlocal enabledelayedexpansion & color f0 & chcp 437 & title Mandelbrot set | | | | | | set "DOT=#" | | set /a "MaxRepeats = 30" | | set /a "ratio=36, EscapeSQ=ratio*ratio*2*2+1, wid=ratio*3, Cols=wid, lines=ratio*2+1, iMax=wid*(lines-1)" | | set /a "XC = Cols*2/3, YC = lines/2" | | set /a "xl=ratio*-2, xh=ratio-1, yl=-ratio+1, yh=ratio" | | mode !Cols!, !lines! | | | | for /l %%i in (1 1 !iMax!) do set "scr= !scr!" | | | | for /l %%a in (!xl! 1 !xh!) do for /l %%b in (!yl! 1 !yh!) do call :Mandelbrot %%a %%b | | cls &(<nul set /p=!scr:~0,-1!) | | >nul pause | | exit | | | | | | :Mandelbrot a b rem c = a + bi | | title %1,%2 | | set /a "repeats=za=zb=0" & rem z = za + zbi | | | | :loop | | | | set /a "ta = za, za = (za*za - zb*zb) / ratio + %1, zb = 2 * ta * zb / ratio + %2" | | set /a "repeats += 1" | | set /a "SQ = za*za + zb*zb, t = SQ - EscapeSQ & repeats - MaxRepeats" | | if !t! lss 0 goto :loop | | | | if !repeats! geq %MaxRepeats% ( | | set /a "x= XC + %1, y= YC - %2" | | set /a "ind=x+y*wid+1, lenL=ind-1, lenR=iMax-ind" | | for /f "tokens=1,2,3" %%a in ("!lenL! !ind! !lenR!") do (set scr=!scr:~0,%%a!%DOT%!scr:~%%b,%%c!) | | cls &(<nul set /p=!scr:~0,-1!) | | ) | | exit /bCOPY |
|