« ミドリグンバイウンカ | トップページ | アワビ »

2008年8月25日 (月)

ヒマワリ

0820himawari1_2 0820himawari2 今年まいた中で1本だけ太くたくましく長く伸びてくれたヒマワリの花です。

きれいな配列ですね。

以前にもこの配列について、フィボナッチ数列の関係がどうのこうの、と書いたように思いますが、ちょっと、プログラムを書いてみました。

Photo いかがでしょう?

似ていませんか?

「理科をアートしよう」高木隆司 著、岩波ジュニア新書 531 という本の第4章が「葉のつき方と黄金比」という題名になっています。

1,1,2,3,5,8,13,21,34,55,89,144,・・・ というのがフィボナッチ数列といいます。ある項は前2項の和になっている、という数列です。

この数列の隣り合う二項の比は1.618・・・という数に近づいていきます。この比を「黄金比」といって、有名な比です。自然界にもこの比が現れるというのは有名でして、数学なんて生活とは無縁だ、という既成概念を打破しようという話のときなどによく登場します。

360度を黄金比に分割した小さい方の角度が137.5度なのですが、これがヒマワリの花の配列を描くときに重要な角度になります。

書籍中に「コンピューターでヒマワリらせんを描く」という項があって、こういう内容でした。

中心点の周りを137.5度ずつ回りながら、同時に一定の割合で中心点から遠ざかりながら、点を打ちます。(このことは、アルキメデス螺旋の上を回りながら点を打つ、というのと同じことになります。)

これを実行してみようか、と思い立って描いてみました。

アルキメデス螺旋は「r=aθ」と表わされる螺旋です。

エクセルのいわゆるマクロであるVisual Basicで書いてみました。下がそのプログラムです。お恥ずかしいくらいに冗長な書き方をしてみました。

------------------------------

Option Explicit

'r = a * θ
'Fibonacci (1 + Sqr(5)) / 2 =1.618033989…
'360 * (1/(1+1.618))=137.5   360度を黄金比に内分

Sub Himawari()
    Const a = 1
    Const pi = 3.14159265358979
    Const f = 137.5
   
    Dim r As Double
    Dim theta As Double
    Dim i As Integer
    Dim row As Integer
    Dim x As Double
    Dim y As Double
   
    row = 1
    For i = 0 To 1000
        theta = (pi / 180) * (i * f)
        r = a * theta
       
        x = r * Cos(theta)
        y = r * Sin(theta)
       
        Cells(row, 1).Value = x
        Cells(row, 2).Value = y
       
        row = row + 1
    Next i
   
End Sub
------------------------------

これを実行すると、グラフ描画用のデータがシート上に出力されますので、それを散布図というグラフにして、少し表示の仕方を工夫すると上の図ができます。いかがでしょう。似てますか?

無駄を省くとこうなります。

------------------------------

Option Explicit

'r = a * θ … a = 1 とすると r = θ でよい
'Fibonacci (1 + Sqr(5)) / 2 =1.618033989…

Sub Himawari2()
    Const pi = 3.14159265358979
    Const sqr_5 = 2.23606797749979
    Const f = 2 * pi * (1 / (1 + (1 + sqr_5) / 2))  '2πを黄金比に内分
   
    Dim i As Integer
    Dim theta As Double
   
    For i = 0 To 1000
        theta = i * f                               'この theta は r でもある
        Cells(i + 1, 1).Value = theta * Cos(theta)  ' x = r * cos(theta) を省略
        Cells(i + 1, 2).Value = theta * Sin(theta)  ' y = r * sin(theta) を省略
    Next i
End Sub
------------------------------

プログラム書きとしては、この方が気分はいいのですけど、読みにくいかもしれません。

このプログラムを、エクセルのマクロに貼り付ければ実行できます。試してみてください。

参考までに、アルキメデス螺旋の描き方も載せておきます。

------------------------------

Option Explicit

' r = a * θ

Sub Archimedes()
    Const a = 1
    Const pi = 3.14159265358979
   
    Dim r As Double
    Dim theta As Double
    Dim i As Integer
    Dim row As Integer
    Dim x As Double
    Dim y As Double
   
   
    row = 1
    For i = 0 To 1080
        theta = (pi / 180) * i
        r = a * theta
       
        x = r * Cos(theta)
        y = r * Sin(theta)
       
        Cells(row, 1).Value = x
        Cells(row, 2).Value = y
       
        row = row + 1
    Next i

End Sub

------------------------------

Spiral これがアルキメデス螺旋です。

蚊取り線香みたいでしょ。

ここでは3回転しか描いていませんが、大きくなる割合が一定なのです。

◆さて、本物のヒマワリの方は成長します。

上の写真は8月20日でしたが、22日にはこうなっていました。

0822himawari 中まで、花が咲き進んでいきます。

生物はやっぱり違いますね。

また、コンピューターで描けば全く乱れのないものが描けますが、生物の描くパターンは、微妙に揺らぎます。どのヒマワリも同じパターンの配列をしながら、それでいて、みんな揺らぎ方が違う。そうして、それをみる人の眼も、揺らいでいて、厳密には同じではないものを、同じパターンであると認識する。ふしぎですね。それが「ぬくもり」というものなのかもしれませんね。

こんなところが、人と自然のかかわりと、コンピューターの世界の違いでしょう。人間同士の遊びと、ゲーム機での遊びは決定的に違っているともいえます。

« ミドリグンバイウンカ | トップページ | アワビ »

植物」カテゴリの記事

コメント

ひまわりの種並び方の
excel・VBAありがとう
ございます。

実際excelでグラフに描くと
中央は密で外周は疎です。

実物のひまわりは
外周まで種がいっぱいです
さらに何か工夫が必要でしょうか?

難しい問題ですね。数学的な「点」と本物の「実数」が無限桁で扱えたら、自己相似的になって、中心付近をいくら拡大しても同じ図形が出てくるはずなのです。混み合うことはないんですけど。
差し当たって、for~next ループを1000回まわさず、100とか200くらいに減らして、グラフ描画のマーカーのサイズを2まで小さくしてみてください。多少はなんとかなるかなぁ。そうすると、中心部の混み合いは解消するとして、外側はすかすかになるでしょうね。現実は厳しいです。

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: ヒマワリ:

« ミドリグンバイウンカ | トップページ | アワビ »

2024年5月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
サイト内検索
ココログ最強検索 by 暴想
無料ブログはココログ