FRTM Sample -- マンデルブロート集合


[Up]

結果

mandel.png(3.4KB)

ワード定義

下記のマンデルブロート集合を表示するワードは,次の複素関数の漸化式の発 散・収束を判定し,その結果を図示しています.
  f(z) = z^2 + C
  z_{n+1} = f(z_n)
ここで,漸化式の初期値を 0 とし,C の実部を -2 〜 0,虚部 -1 〜 1 の範 囲で変化させています.100 回の繰り返しの間に絶対値が 2 を越したものは発 散したものと判定します.

なお,下記のワードは整数が 32bit 以上で表現されていることを仮定したものです.

: dot dup 100 > if drop 0 else 15 % 1+ endif setcolor 4 ndrop 
    over 340 - minus over 220 + swap 1 1 rectf ;
: check 100 > if drop drop 1 else dup * swap dup * + 4000000 > endif ;
: nextr dup * 1000 / swap dup * 1000 / - 5 ndup + ;
: nexti * 500 / 7 ndup + ;
: next 1+ rotr 2 copy nextr 4 nrotr 2 copy nexti 5 nrotr drop drop ;
: mpoint do 3 copy check if dot 0 else next 1 endif while ;
: mandel 201 0 for I 201 0 for I 
    over 100 - 10 * over 200 - 10 * 0 0 0 mpoint drop loop drop loop ;

gm mandel
tm

naniwa@rbt.his.fukui-u.ac.jp