松ぼっくりのsketch

松ぼっくり
息子が拾ってきた、松ぼっくりの根元をふと眺めてみると、美しい螺旋が見えてきました。いわゆる、植物などの成長形態にみられる『フィボナッチ螺旋』です。松ぼっくりの鱗片 (うろこみたいな部分)の並びや成長角度に、黄金比やフィボナッチ数の比率が現れています。
黄金比は自然界に多くみられ、大昔から数学、芸術、哲学などの分野で多くの人々を魅了してきました。生物形態などについても、「美しいなー」と思うところ、数学的法則が隠されていたりします。また、データーベース検索のアルゴリズムや株価分析にも利用されたりしているようです。
この松ぼっくりに興味がでてきたので、簡単にこの松ぼっくりをスケッチしてみました。Processingで、、、
fibonacci
円形の図形が、中心から黄金比率に関連したパラメーターで回転し、外側にずれながら配置される単純なコードです。とりあえず、画面いっぱいまで増殖させて、pinecone.pngという名前の画像ファイルを書き出すようにしています。単純な仕組みですが、なんとなく松ぼっくり的な形態が現れました。実際の松ぼっくりは時計回りの13個の鱗片の螺旋曲線と8個の反時計周りの螺旋曲線の組み合わせです。


float t; // t*t - t - 1 = 0, フィボナッチ方程式の正の解が、黄金比です
float Ang;
float rad;
float rgrowth;
float rot = 0;
float x,y;
float w = 5;
float h = 5;

void setup() {
size(640,640);
background(0);
smooth();
fill(0);
colorMode(HSB, 100);
strokeWeight(0.3);
frameRate(100);

t = 1.618033989;

Ang = 360 / t; //成長角度

rad = 5;
rgrowth = 1.005;
}

void draw() {
if(x < width) { rot += Ang; rot -= int(rot/360) * 360; rad *= rgrowth; stroke(99); x = rad * cos(radians(rot)) + width/2; y = rad * sin(radians(rot)) + height/2; ellipse(x,y,w,h); w+=1/(10*t); h+=1/(10*t); } else { save("pinecone.png"); } }

Angの値を変えると様々なバリエーションがでてきます。実際の植物も黄金比tの近似値の選択で様々なバリエーションが生まれているのでしょう。
下記のパターンは
Ang = 360 / t + 3
書き換えただけです。
pinecone_alt
それで、ちょっと発展させて、ランダムに螺旋模様を次から次へと生み出すコードに改造してみました。
Please Click<==Javaのアプレットへのリンクです。 フィボナッチ数列をはじめ再帰的アルゴリズムに魅せられるのは、自然の何かに近づく感じがもてる感覚なのかなと思ったりしています。だけどまた,生成原理の逆をたどるのが困難で、構造を生成するパラメーターや置換規則をみつけるが難しいのも、自然との距離感をまた感じるところでもあります。 meenaxydesignのtwitterのページの背景画像の3Dモデルは再帰的アルゴリズムで生成してできたものです。

参考にした図書

    『黄金比とフィボナッチ数』R.A.ダンラップ著 岩永恭雄・松井講介訳 日本評論社
    『自然界の秘められたデザイン』イアン・スチュアート著 梶山あゆみ訳 河出書房新社

黄金比に関連した、総合的なリソースサイトです。