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さんが作った動画の中にあるので、また、記事に書いてみたいと思います。

2017年5月29日月曜日

フラクタル その1

しばらく、何も書いていませんでしたが、また何か書いてみようと思います。

最近は、"Processing"という、コンピュータプログラミングができるソフトを使って、お絵描きしたり、アニメーションしたりしています。だいぶ前に、黄金角の記事を書いたときに、このProcessingを使っています。

今回は、YouTubeで見た、フラクタルに関する動画について書いてみたいと思います。
"8.2: Fractal Recursion - The Nature of Code"
(ちなみに英語です)

「フラクタル」とは、図形の一部が元の図形の縮小されているようなもののことをいいます。ブロッコリーの枝分かれした部分を取ってその形を見ると、元のブロッコリーの縮小された形になっている、などがその例です。

今回見た動画では、

「ある半径の円を描き、その円の左端、右端、上端、それぞれを中心に半径を半分にして円を描き、それらの円の左端、右端、上端、それぞれを中心に…」

ということを繰り返すプログラムを解説していました。(実際の動画は「上端」ではなく「下端」です)

順を追って絵を描いてみると、「ある半径の円を描き、」
「その円の左端、右端、上端、それぞれを中心に半径を半分にして円を描き、」
 「それらの円の左端、右端、上端、それぞれを中心に…」
 そして、これを繰り返すと、このようになります。
 三角形が浮かび上がってきました。これは「シェルピンスキー」の三角形と呼ばれるものです。普通は直線で以下のように描きます。
円を描いていったら三角形ができるというのはおもしろいですね。「円の左端、右端、上端」の三ヶ所を繰り返し描いているからなのでしょうが、動画を最初見たときは「えぇっ!?」でした。

ちなみにこの動画は、Processingを使って自然界の法則等をコンピュータ内で実現してみるという、教材動画の一部です。もとは"The Nature of Code"という本があって,それを基に解説しています。この本の著者のDaniel Shiffmanさん、というかたが動画で解説しているのですが、なかなかおもしろいかたです。

このほかの動画についても、いずれ紹介したいと思います。