ねこでじ(Nekodigi)

Nekodigi’s diary

Programming, Art, Travel and etc...

【Processing】Barnsley fernは意外な描き方でシダの葉のフラクタルを描いていた

成果物

www.youtube.com

有名なフラクタルアルゴリズムのコードを見てみたのですが、予想外のコードだったので、どのように描いているのかを探ってみました。すると、根元から広がるように書いているのではなく、根元から葉一つ分ずつ先端に向かって書いていることが分かりました。

w a b c d e f p Portion generated
ƒ1 0 0 0 0.16 0 0 0.01 Stem
ƒ2 0.85 0.04 −0.04 0.85 0 1.60 0.85 Successively smaller leaflets
ƒ3 0.20 −0.26 0.23 0.22 0 1.60 0.07 Largest left-hand leaflet
ƒ4 −0.15 0.28 0.26 0.24 0 0.44 0.07 Largest right-hand leaflet

英語版のBarnsly fernにこのような図がありますが、

en.wikipedia.org

Successively smaller leafletsの時に先端に向かって進み、

Stemの時に茎に移動し、

Largest left-hand leafletの時に一番大きい左の葉に移動し、

Largest right-hand leafletの時に一番大きい右の葉に移動しているようです。

これを、ランダムで繰り返していくことによってシダの図が書けるようです。面白い…

また、このサイトによると、Wikipediaのサイトにあった行列式は、アフィン変換で、進行方向を回転させる働きがあるようです。

math-fun.net

コード

コードについての解説はこちらをご覧ください。

www.youtube.com

今回作った、現在書いている場所が分かるようになっているコードはこちらです。PGraphicsを使っているのでコードは、少々難しいですが、ぜひご覧ください。