2019年2月7日木曜日

シェルピンスキーのギャスケット

HaskellにもTurtleグラフィックスがあります。
ただどうしてもインストールできませんでした。

そこでHaskellでPythonのコードを出力します。






再帰深度1の場合、次のようなコードを生成します。

$ runghc t.hs 1 > a
$ cat a
from turtle import *
t=Turtle()
t.penup()
t.shape('turtle')
t.setpos((-200.0,-200.0))
t.pendown()
t.fillcolor('black')
t.begin_fill()
t.setpos((-200.0,-200.0))
t.setpos((200.0,-200.0))
t.setpos((0.0,146.41016151377534))
t.setpos((-200.0,-200.0))
t.end_fill()
t.penup()
t.fillcolor('white')
t.begin_fill()
t.setpos((0.0,-200.0))
t.setpos((100.0,-26.794919243112332))
t.setpos((-100.0,-26.794919243112332))
t.setpos((0.0,-200.0))
t.end_fill()
done()

pythonにパイプします。

$ cat a | python



直接Pythonにパイプしても可。

$ runghc t.hs 6 | python

再帰深度は5〜7が適当です。(深度を深くとってPythonの起動まで時間がかかる場合はコンパイルします)

6の場合の実行結果


カメの軌跡で描くこともできます。

コードはこちら 実行例の再帰深度は5。カメの動きはのろめ。
繰り返しの中に再帰が埋め込まれているので少し複雑なコードになっています。

ついでにコッホ曲線も。




コードは


またランダムな要素を取り入れると

のような画像が得られる。自然の海岸線に見えなくもない。(いくつか描画してみていかにもそれらしいものを選んでいます)
そのためのコードはこちら


複素数と平面図形に関する公式は
https://examist.jp/category/mathematics/complex-plane/
を参照しました。

ちなみに、マンデルブローの「The Misbehavior of Markets」に掲載されている画像はこちら。

スクラッチでも再帰は書けるらしい。

「こういうプログラムを再帰って言うんだ。
すこしむつかしいけど、おぼえておこう。」

シェルピンスキーのギャスケットをスクラッチで描くページはいくつかありますが、
最初に参照したページをあげておきます。

https://i-learn.jp/article/3302


こちらも参照下さい。http://hhg2the-haskell.blogspot.com/2017/10/blog-post_75.html

0 件のコメント:

コメントを投稿