愛亀「かめちゃん(クサガメ)」の頬の模様をイメージしたパターンを、Gray–Scott 反応拡散モデルで生成するミニプロジェクトです。
- FFT + IMEX(拡散は陰、反応は陽)で高速に時間発展
- クサガメっぽい配色の kusagame colormap を同梱
2成分 ,U, V, の反応拡散方程式を離散化して解きます:
- 初期条件: ランダムなパッチ(U↓/V↑)とノイズを散布
- 時間積分: IMEX
- 反応項は 陽的(Explicit)
- 拡散項はフーリエ空間で 陰的(Implicit) に解く(離散ラプラシアンの固有値で割る)
- Python 3.9+(推奨 3.10+)
- numpy
- matplotlib
pip install -U numpy matplotlibpython3 kamechan_pattern.pyデフォルトでは 3×3 のギャラリーを表示します(seed は master_seed から生成)。
1枚目を計算中... (Seed: 5784)🐢
2枚目を計算中... (Seed: 8009)🐢
3枚目を計算中... (Seed: 8673)🐢
4枚目を計算中... (Seed: 1803)🐢
5枚目を計算中... (Seed: 4450)🐢
6枚目を計算中... (Seed: 8078)🐢
7枚目を計算中... (Seed: 405)🐢
8枚目を計算中... (Seed: 75)🐢
9枚目を計算中... (Seed: 193)🐢
完成しました!🐢
Du,Dv: 拡散係数(大きいほどぼける)F: feed(供給)k: kill(除去)
一般に (F, k) の組で縞/斑点の相が大きく変わります。 (例)縞寄り・斑点寄りなどはこの2つが支配的になりがちです。
N: グリッドサイズpatches,patch_size: パッチ数・サイズpatch_U,patch_V: パッチ内の U/V 値noise: 初期ノイズ強度
dtを大きくすると速いですが、荒くなったり発散しやすくなりますFloatingPointError: Numerical blow-up detectedが出たら まずdtを小さくしてください(例: 5.0 → 2.0 → 1.0)
kamechan_pattern.py: 生成コード(Gray–Scott + FFT/IMEX)kamechan.JPG: かめちゃん写真example.png: 生成例
- この実装は「速くて気軽」寄りの設定です(精密な PDE 解析というより、模様生成を楽しむ用途)
