見出し画像

Processing.pyでアート #つぶやきProcessing

最近Twitterで流行っている #つぶやきProcessing に上げた作品のまとめ。

つぶやきProcessingとはTwitterではぅ君さんが取り組んでいたもので、1ツイート内に収まるProcessingのコードでアートを作るものです。

ツイートに収まるようにコードを調整する作業がパズルみたいな感じで楽しく、お盆休み中にかなり熱中してしまったので、コメント付きでコードをまとめておきます。

最初の挑戦。コードをツイートに収めるのが難しく、また楽しいことに気づく。このときは深く考えずに #つぶやきProcessing タグで投稿してしまったけれど、"#つぶやきProcessing .py" とかの方がPythonモードだと区別できて良かったかもですね。

Javaモードと違い、Pythonモードでは
 ① 文法上インデントが必須
 ② デフォルトのインデントが空白4文字 (Javaモードは空白2文字)
とインデントの文字数コストが高めです。 ...でもリスト内包表記だったらインデントせずに事実上のループができるな?と気づいてしまったのが上の3つのコード。

あとはぅ君さんのコードを見て、background(0)じゃなくてclear()で黒背景にできることを発見。また、線の色を白にするときはstroke(255)よりもstroke(-1)の方が少しだけ短くできます(Processingの色の実態は負の整数で、「白」は-1)。

これらはシェーダーを作成して、それを読み込むもの。Pythonでファイルを読み書きする際は with open("ファイル名") as f: のコンテキストマネージャを使うことが多いけど、明示的にf.close()で閉じるほうが文字数的には少なくて済むみたい。

みんな大好きde Jongアトラクタ。"a, b, c, d, x, y = ..." みたいに複数変数に同時代入できるのはPythonの強み。あと今更だけど変数の型を書かなくていいのも便利ですね。

何やら必殺技エフェクトっぽい赤い模様をなんとかツイートに収めようと奮闘したもの。サイズを198×198にして中心座標を2桁(99)で指定できるようにしたり、回転角の TWO_PI/5 を数字の1.26で代用したり(3桁あれば案外なんとかなるみたい)、赤色をcolor(255, 0, 0) じゃなく-2**8で指定したり(Processingの「色」の実態は負の整数)しました。

擬似ランダムウォーク。インデントせずにifの条件分岐を使うために少し工夫。条件が真であった場合に丸を打つ処理を加えるため、丸を打つ処理を条件式として追加。circle()の戻り値はNone(条件としては偽)なので、[circle()]としています(空でないリストは条件としては真)。

再帰でなんかフラクタルっぽいもの。フラクタル...?

オイラー法による軌道計算をツイートに詰め込み。位置と速度を同じリストに格納し、p[1::-1]みたいなリストのスライスを使って強引に文字数を削減。普通はこんなコード書かない。

多角形の各辺の中点を結んで新たに多角形をつくる操作を繰り返したもの。蜘蛛の巣みたいな感じになりました。

移動方向が8方向に制限されたベクターフィールド。 回転角TWO_PI/8 = 0.785...を単に0.8としているので少し線がぶれているけど、これはこれで。

文字を書いてみる、けど文字数の都合でしっかりとは書けない。4, 6, 8, 9, 0みたいに穴の空いた文字を書くには特別な処理が必要。

Twitterで見つけた「人魂のつくりかた」を参考に。Pythonでは変数に関数を代入することができるので、冒頭でellipse()を変数eに代入して1文字で呼べるようにしてます。

filter(BLUR)で色の拡散ができるってことは、反応拡散系みたいなものができるな...? という着想で作成。実際に何が起きているのかは、書いている私にもよくわかっていなかったり。

以前Twitterで教えてもらった、並べた球を上から見るとボロノイ図になる、という方法を試してみたもの。色もちょっとこだわって青系統で作成。ボロノい。

この記事が気に入ったらサポートをしてみませんか?