python cairo でペンローズタイリングお絵描き

  • cairoというお絵描き仕様がある
    • pythonにもあって、それ以外でも使われている
    • 特徴は、ベクター仕様でのお絵描きであること。ラスター画像ではないということ
    • 画面をピクセルに分けて、そこを何色にするか、というラスター画像では、拡縮をしたときにいちいち滑らかさの調整をしないといけないが、ベクター仕様では、そうならない
    • SVGとかがその方法をとっているが、それ以外にもPDFなどでも
    • 例えば線分の指定では、始点と終点とを指定することでベクトルを与える。そのうえで、そのベクトルは、座標変換(平行移動、回転、拡縮など)をして、描図オブジェクトすべてを一括変換することもできる
    • こちらにその解説がある

magazine.rubyist.net

  • さて。このcairoだが、pythonで使おうとおもったら、インストールに難航した
    • PC環境に、所謂pythonが入っていて、Anacondaも別途に入れてあって

、sagemathのダウンロードによりそれ専用のpython環境もあって、そのどこでcairoが使いたいのかが自分でもぼんやりとしていたことが難航の原因

    • pipは普通のpython環境、condaを使ったパッケージインストールはanaconda環境、sagemathのpython環境はsageでのpipを使わないといけない

www.python.jp

    • また、sagemath下でのpythonパッケージ導入は、めんどうくさいらしく、結局pycairoについては断念。。。
    • 参考サイトを一応、挙げておく

sonickun.hatenablog.com

ask.sagemath.org

  • 基本的には、pipもcondaも環境を最新版に上げ続けるのが吉。pythonも更新しておくほうが良い
    • Anacondaは、面倒くさいので一旦全部削除して入れ直すほうが速そう

Anacondaのアンインストールからの再インストール | Udemyのセールを活用してほしかったあのスキルを手に入れよう!【非公式】

  • その他としてはjupyter notebook でcairoの画像をinlineに出すにはさらに工夫が必要
    • こちらのサイトを参考に、cairoが作ったベクター形式の画像の元情報を、pngファイルに書き出す関数を作った上で、inline にださせるという作戦

qiita.com

  • これらを経て作ったjupyter notebookが以下:

github.com