86 lines
11 KiB
HTML
86 lines
11 KiB
HTML
<!DOCTYPE html>
|
|
<html><head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
|
<title>highlight.tig</title>
|
|
<meta name="generator" content="KF5::SyntaxHighlighting - Definition (Tiger) - Theme (Breeze Dark)"/>
|
|
</head><body style="background-color:#232629;color:#cfcfc2"><pre>
|
|
<span style="color:#7a7c7d">/* Mandelbrot integer demo</span>
|
|
<span style="color:#7a7c7d"> * Released under the MIT License</span>
|
|
<span style="color:#7a7c7d"> */</span>
|
|
|
|
<span style="font-weight:bold">let</span>
|
|
<span style="color:#7a7c7d">/* Basic types. */</span>
|
|
<span style="font-weight:bold">type</span> bool <span style="color:#3f8058">=</span> <span style="color:#2980b9">int</span>
|
|
<span style="font-weight:bold">type</span> coord <span style="color:#3f8058">=</span> <span style="color:#2980b9">int</span>
|
|
<span style="font-weight:bold">type</span> value <span style="color:#3f8058">=</span> <span style="color:#2980b9">int</span>
|
|
<span style="font-weight:bold">type</span> array2d <span style="color:#3f8058">=</span> <span style="font-weight:bold">array</span> <span style="font-weight:bold">of</span> value
|
|
<span style="font-weight:bold">type</span> image2d <span style="color:#3f8058">=</span> { nrows <span style="color:#3f8058">:</span> coord<span style="color:#3f8058">,</span> ncols <span style="color:#3f8058">:</span> coord<span style="color:#3f8058">,</span> data <span style="color:#3f8058">:</span> array2d }
|
|
|
|
<span style="color:#7a7c7d">/* Image creation. */</span>
|
|
<span style="font-weight:bold">function</span> image_new (ncols <span style="color:#3f8058">:</span> coord<span style="color:#3f8058">,</span> nrows <span style="color:#3f8058">:</span> coord) <span style="color:#3f8058">:</span> image2d <span style="color:#3f8058">=</span>
|
|
image2d { nrows <span style="color:#3f8058">=</span> nrows<span style="color:#3f8058">,</span> ncols <span style="color:#3f8058">=</span> ncols<span style="color:#3f8058">,</span>
|
|
data <span style="color:#3f8058">=</span> array2d[nrows <span style="color:#3f8058">*</span> ncols] <span style="font-weight:bold">of</span> <span style="color:#f67400">0</span> }
|
|
|
|
<span style="font-weight:bold">function</span> image_set (input <span style="color:#3f8058">:</span> image2d<span style="color:#3f8058">,</span> col <span style="color:#3f8058">:</span> coord<span style="color:#3f8058">,</span> row <span style="color:#3f8058">:</span> coord<span style="color:#3f8058">,</span>
|
|
value <span style="color:#3f8058">:</span> value) <span style="color:#3f8058">=</span>
|
|
(
|
|
input<span style="color:#3f8058">.</span>data[row <span style="color:#3f8058">*</span> input<span style="color:#3f8058">.</span>ncols <span style="color:#3f8058">+</span> col] <span style="color:#3f8058">:=</span> value
|
|
)
|
|
|
|
<span style="font-weight:bold">function</span> mandelbrot () <span style="color:#3f8058">=</span>
|
|
<span style="font-weight:bold">let</span>
|
|
<span style="font-weight:bold">type</span> fp <span style="color:#3f8058">=</span> <span style="color:#2980b9">int</span>
|
|
<span style="font-weight:bold">var</span> X <span style="color:#3f8058">:</span> <span style="color:#2980b9">int</span> <span style="color:#3f8058">:=</span> <span style="color:#f67400">300</span>
|
|
<span style="font-weight:bold">var</span> Y <span style="color:#3f8058">:</span> <span style="color:#2980b9">int</span> <span style="color:#3f8058">:=</span> <span style="color:#f67400">300</span>
|
|
<span style="font-weight:bold">var</span> ima <span style="color:#3f8058">:</span> image2d <span style="color:#3f8058">:=</span> image_new (X<span style="color:#3f8058">,</span> Y)
|
|
<span style="font-weight:bold">var</span> fixsize<span style="color:#3f8058">:</span> <span style="color:#2980b9">int</span> <span style="color:#3f8058">:=</span> <span style="color:#f67400">16834</span>
|
|
|
|
<span style="font-weight:bold">function</span> mul(a <span style="color:#3f8058">:</span> fp<span style="color:#3f8058">,</span> b <span style="color:#3f8058">:</span> fp) <span style="color:#3f8058">:</span> fp <span style="color:#3f8058">=</span> (a<span style="color:#3f8058">*</span>b)<span style="color:#3f8058">/</span>fixsize
|
|
<span style="font-weight:bold">function</span> frac(n <span style="color:#3f8058">:</span> <span style="color:#2980b9">int</span><span style="color:#3f8058">,</span> d <span style="color:#3f8058">:</span> <span style="color:#2980b9">int</span>) <span style="color:#3f8058">:</span> fp <span style="color:#3f8058">=</span> (n<span style="color:#3f8058">*</span>fixsize)<span style="color:#3f8058">/</span>d
|
|
|
|
<span style="font-weight:bold">var</span> xcenter <span style="color:#3f8058">:</span> fp <span style="color:#3f8058">:=</span> frac(<span style="color:#f67400">0016</span><span style="color:#3f8058">,</span> <span style="color:#f67400">10000</span>)
|
|
<span style="font-weight:bold">var</span> ycenter <span style="color:#3f8058">:</span> fp <span style="color:#3f8058">:=</span> frac(<span style="color:#f67400">8224</span><span style="color:#3f8058">,</span> <span style="color:#f67400">10000</span>)
|
|
<span style="font-weight:bold">var</span> xmin <span style="color:#3f8058">:</span> fp <span style="color:#3f8058">:=</span> xcenter <span style="color:#3f8058">-</span> frac(<span style="color:#f67400">5</span><span style="color:#3f8058">,</span><span style="color:#f67400">100</span>)
|
|
<span style="font-weight:bold">var</span> ymin <span style="color:#3f8058">:</span> fp <span style="color:#3f8058">:=</span> ycenter <span style="color:#3f8058">-</span> frac(<span style="color:#f67400">5</span><span style="color:#3f8058">,</span><span style="color:#f67400">100</span>)
|
|
<span style="font-weight:bold">var</span> xmax <span style="color:#3f8058">:</span> fp <span style="color:#3f8058">:=</span> xcenter <span style="color:#3f8058">+</span> frac(<span style="color:#f67400">5</span><span style="color:#3f8058">,</span><span style="color:#f67400">100</span>)
|
|
<span style="font-weight:bold">var</span> ymax <span style="color:#3f8058">:</span> fp <span style="color:#3f8058">:=</span> ycenter <span style="color:#3f8058">+</span> frac(<span style="color:#f67400">5</span><span style="color:#3f8058">,</span><span style="color:#f67400">100</span>)
|
|
<span style="font-weight:bold">var</span> xs <span style="color:#3f8058">:</span> fp <span style="color:#3f8058">:=</span> (xmax <span style="color:#3f8058">-</span> xmin)<span style="color:#3f8058">/</span>X
|
|
<span style="font-weight:bold">var</span> ys <span style="color:#3f8058">:</span> fp <span style="color:#3f8058">:=</span> (ymax <span style="color:#3f8058">-</span> ymin)<span style="color:#3f8058">/</span>Y
|
|
|
|
<span style="font-weight:bold">function</span> iterations(x<span style="color:#3f8058">:</span><span style="color:#2980b9">int</span><span style="color:#3f8058">,</span> y<span style="color:#3f8058">:</span><span style="color:#2980b9">int</span>) <span style="color:#3f8058">:</span> <span style="color:#2980b9">int</span> <span style="color:#3f8058">=</span>
|
|
<span style="font-weight:bold">let</span>
|
|
<span style="font-weight:bold">var</span> i <span style="color:#3f8058">:</span> <span style="color:#2980b9">int</span> <span style="color:#3f8058">:=</span> <span style="color:#f67400">0</span>
|
|
<span style="font-weight:bold">var</span> p <span style="color:#3f8058">:</span> fp <span style="color:#3f8058">:=</span> xmin<span style="color:#3f8058">+</span>x<span style="color:#3f8058">*</span>xs
|
|
<span style="font-weight:bold">var</span> q <span style="color:#3f8058">:</span> fp <span style="color:#3f8058">:=</span> ymin<span style="color:#3f8058">+</span>y<span style="color:#3f8058">*</span>ys
|
|
<span style="font-weight:bold">var</span> x0 <span style="color:#3f8058">:</span> fp <span style="color:#3f8058">:=</span> <span style="color:#f67400">0</span>
|
|
<span style="font-weight:bold">var</span> y0 <span style="color:#3f8058">:</span> fp <span style="color:#3f8058">:=</span> <span style="color:#f67400">0</span>
|
|
<span style="font-weight:bold">var</span> xn <span style="color:#3f8058">:</span> fp <span style="color:#3f8058">:=</span> <span style="color:#f67400">0</span>
|
|
<span style="font-weight:bold">var</span> four <span style="color:#3f8058">:</span> fp <span style="color:#3f8058">:=</span> frac(<span style="color:#f67400">4</span><span style="color:#3f8058">,</span><span style="color:#f67400">1</span>)
|
|
<span style="font-weight:bold">var</span> two <span style="color:#3f8058">:</span> fp <span style="color:#3f8058">:=</span> frac(<span style="color:#f67400">2</span><span style="color:#3f8058">,</span><span style="color:#f67400">1</span>)
|
|
<span style="font-weight:bold">in</span>
|
|
<span style="color:#fdbc4b;font-weight:bold">while</span> (mul(xn<span style="color:#3f8058">,</span>xn)<span style="color:#3f8058">+</span>mul(y0<span style="color:#3f8058">,</span>y0) <span style="color:#3f8058"><</span> four) <span style="color:#3f8058">&</span> (i <span style="color:#3f8058"><</span> <span style="color:#f67400">256</span>) <span style="color:#fdbc4b;font-weight:bold">do</span>
|
|
(
|
|
i <span style="color:#3f8058">:=</span> i <span style="color:#3f8058">+</span> <span style="color:#f67400">1</span><span style="color:#3f8058">;</span>
|
|
xn <span style="color:#3f8058">:=</span> mul((x0<span style="color:#3f8058">+</span>y0)<span style="color:#3f8058">,</span>(x0<span style="color:#3f8058">-</span>y0)) <span style="color:#3f8058">+</span> p<span style="color:#3f8058">;</span>
|
|
y0 <span style="color:#3f8058">:=</span> mul(two<span style="color:#3f8058">,</span>mul(x0<span style="color:#3f8058">,</span>y0)) <span style="color:#3f8058">+</span> q<span style="color:#3f8058">;</span>
|
|
x0 <span style="color:#3f8058">:=</span> xn
|
|
)<span style="color:#3f8058">;</span>
|
|
i
|
|
<span style="font-weight:bold">end</span>
|
|
|
|
<span style="font-weight:bold">in</span>
|
|
|
|
(<span style="color:#fdbc4b;font-weight:bold">for</span> y <span style="color:#3f8058">:=</span> <span style="color:#f67400">0</span> <span style="color:#fdbc4b;font-weight:bold">to</span> (Y<span style="color:#3f8058">-</span><span style="color:#f67400">1</span>) <span style="color:#fdbc4b;font-weight:bold">do</span>
|
|
<span style="color:#fdbc4b;font-weight:bold">for</span> x <span style="color:#3f8058">:=</span> <span style="color:#f67400">0</span> <span style="color:#fdbc4b;font-weight:bold">to</span> (X<span style="color:#3f8058">-</span><span style="color:#f67400">1</span>) <span style="color:#fdbc4b;font-weight:bold">do</span>
|
|
<span style="font-weight:bold">let</span>
|
|
<span style="font-weight:bold">var</span> i <span style="color:#3f8058">:</span> <span style="color:#2980b9">int</span> <span style="color:#3f8058">:=</span> iterations(x<span style="color:#3f8058">,</span>y)
|
|
<span style="font-weight:bold">in</span>
|
|
image_set (ima<span style="color:#3f8058">,</span> x<span style="color:#3f8058">,</span> y<span style="color:#3f8058">,</span> i)
|
|
<span style="font-weight:bold">end</span>)<span style="color:#3f8058">;</span>
|
|
<span style="font-weight:bold">end</span>
|
|
<span style="font-weight:bold">in</span>
|
|
<span style="color:#8e44ad">print</span>(<span style="color:#f44f4f">"Mandelbrot demo</span><span style="color:#3daee9">\n</span><span style="color:#f44f4f">"</span>)<span style="color:#3f8058">;</span>
|
|
mandelbrot()
|
|
<span style="font-weight:bold">end</span>
|
|
</pre></body></html>
|