今回は、フラクタルに関する別の動画について書いてみたいと思います。
"8.4: Recursion with Transformations - The Nature of Code"
(ちなみに英語です)
直線を引いて、左右にそれぞれ30度向きを変えて直線を引いて、それぞれの直線に対して左右にそれぞれ30度向きを変えて直線を引いて、それぞれの直線に…、を繰り返し、木のような絵を描くものです。角度を増やしていくと、
"8.4: Recursion with Transformations - The Nature of Code"
(ちなみに英語です)
直線を引いて、左右にそれぞれ30度向きを変えて直線を引いて、それぞれの直線に対して左右にそれぞれ30度向きを変えて直線を引いて、それぞれの直線に…、を繰り返し、木のような絵を描くものです。角度を増やしていくと、
30度
45度
60度
75度
90度
向きを変える角度が30度では木のように見えなくもないですね。角度が大きくなると人工的というか、何かのデザインに見えますね。
前の記事もそうですが、このようなプログラムでは「再帰」(recursion)というものを使います。同じことを設定を変えながら繰り返すのですが、ただの繰り返しとは違います。
たとえば、今回の木のような絵を描くために
『枝分かれした直線を描く』
という機能をプログラムで作るとします。この機能は
「直線を引いて、左右にそれぞれ30度向きを変えて直線を引く」
というものですが、少し変えて、
「直線を引いて、左右にそれぞれ30度向きを変えて『枝分かれした直線を描く』機能を使う」
とします。まとめると、
『枝分かれした直線を描く』機能の中身は
「直線を引いて、左右にそれぞれ30度向きを変えて『枝分かれした直線を描く』機能を使う」である。
となり、機能の中身に、その機能自身が入っているので、延々と繰り返されることになるのです。こういうものを「再帰」(再び自分自身に帰る)といいます。
ただ、本当に延々と無限に繰り返すわけにはいかないので、実際はどこかでストップをかけないといけません。
今回見た動画の他にも、別の方法で木の絵を描くものが、同じくDaniel Shiffmanさんが作った動画の中にあるので、また、記事に書いてみたいと思います。