週末文書

とりあえず、まぁ、週末です。

Python/Matplotlibでフィボナッチ螺旋を描いてみた

Pythonプログラミングの入門書を読んで勉強中です。

実行環境を用意しシンタックスもなんとなくわかってくると、何かプログラムを書いてみたくなりました。

で、ふと「フィボナッチ螺旋」を書いてみようと思ったわけです。

フィボナッチ螺旋

ここで言っているフィボナッチ螺旋というのは、辺の長さがwikipedia:フィボナッチ数列になっている正方形を組み合わせ、その正方形の頂点を通る円弧(四分円)を結んだものです。

本当は、Wikipediaにある黄金比を使ったwikipedia:対数螺旋である黄金螺旋でないとフィボナッチの螺旋と言えないような気もします。しかし、対数螺旋を書くのはどうも手にあまりりそうだったので、円弧の連結による書き方*1をとることにしました。

Pythonでの作図(グラフ作成)

ググってみると、PythonにはMatplotlibというライブラリーがあり、このライブラリーを使うとグラフが簡単に作成できるというのがPython人気の理由の一つとなっているようだ、ということがわかりました。

このMatplotlib、多くの人がそれぞれ違った環境・違ったスタイルでサンプルコードを公開しているため、ライブラリーの構造や使い方を把握するのに苦労しました。
ちなみにMatplotlibの基本要素を把握する上で一番参考になったのは、「早く知っておきたかったmatplotlibの基礎知識、あるいは見た目の調整が捗るArtistの話 - Qiita」でした。

結局、「円弧の組み合わせを描く」という目的にあった一番シンプルなサンプルとして、「【Python入門】ライブラリmatplotlibの基本的な使い方 - Qiita」を参考とさせていただきました。

とりま、こんなもんで

サンプルは三角関数サインカーブを描いていますが、これを円弧に変えれば簡単じゃない、という発想です。

肝心の円弧の方程式の三角関数表記が思い出せなくてあわてたり、四分円の中心や正方形の位置合わせのロジックを整理するのに手間取ったり、そもそもPythonの書き方がわかっていなかったり、相当あたふたしましたが、一応、初期の目的であるフィボナッチ螺旋の描画を行うことができました。

f:id:medihen:20190323232005p:plain
フィボナッチ螺旋の描画サンプル

この後、回転してよくあるフィボナッチ螺旋の図と同じ向きにできるようにしたり、円弧の個数を自由に変えられるようにしたり、反転した螺旋を描けるようにしたり手を加えていったら、えらく時間がかかってしまいました。

*1:この書き方で書いた螺旋を「フィボナッチ螺旋」としているWebページもままありますし。