2017年7月1日土曜日

フラクタル その2

今回は、フラクタルに関する別の動画について書いてみたいと思います。

"8.4: Recursion with Transformations - The Nature of Code"
(ちなみに英語です)

直線を引いて、左右にそれぞれ30度向きを変えて直線を引いて、それぞれの直線に対して左右にそれぞれ30度向きを変えて直線を引いて、それぞれの直線に…、を繰り返し、木のような絵を描くものです。角度を増やしていくと、

30度

45度

60度

75度

90度

向きを変える角度が30度では木のように見えなくもないですね。角度が大きくなると人工的というか、何かのデザインに見えますね。

前の記事もそうですが、このようなプログラムでは「再帰」(recursion)というものを使います。同じことを設定を変えながら繰り返すのですが、ただの繰り返しとは違います。

たとえば、今回の木のような絵を描くために

『枝分かれした直線を描く』

という機能をプログラムで作るとします。この機能は

「直線を引いて、左右にそれぞれ30度向きを変えて直線を引く」

というものですが、少し変えて、

「直線を引いて、左右にそれぞれ30度向きを変えて『枝分かれした直線を描く』機能を使う」

とします。まとめると、

『枝分かれした直線を描く』機能の中身は
「直線を引いて、左右にそれぞれ30度向きを変えて『枝分かれした直線を描く』機能を使う」である。

となり、機能の中身に、その機能自身が入っているので、延々と繰り返されることになるのです。こういうものを「再帰」(再び自分自身に帰る)といいます。

ただ、本当に延々と無限に繰り返すわけにはいかないので、実際はどこかでストップをかけないといけません。

今回見た動画の他にも、別の方法で木の絵を描くものが、同じくDaniel Shiffmanさんが作った動画の中にあるので、また、記事に書いてみたいと思います。