ヒマワリ
今年まいた中で1本だけ太くたくましく長く伸びてくれたヒマワリの花です。
きれいな配列ですね。
以前にもこの配列について、フィボナッチ数列の関係がどうのこうの、と書いたように思いますが、ちょっと、プログラムを書いてみました。
似ていませんか?
「理科をアートしよう」高木隆司 著、岩波ジュニア新書 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
------------------------------
蚊取り線香みたいでしょ。
ここでは3回転しか描いていませんが、大きくなる割合が一定なのです。
◆さて、本物のヒマワリの方は成長します。
上の写真は8月20日でしたが、22日にはこうなっていました。
生物はやっぱり違いますね。
また、コンピューターで描けば全く乱れのないものが描けますが、生物の描くパターンは、微妙に揺らぎます。どのヒマワリも同じパターンの配列をしながら、それでいて、みんな揺らぎ方が違う。そうして、それをみる人の眼も、揺らいでいて、厳密には同じではないものを、同じパターンであると認識する。ふしぎですね。それが「ぬくもり」というものなのかもしれませんね。
こんなところが、人と自然のかかわりと、コンピューターの世界の違いでしょう。人間同士の遊びと、ゲーム機での遊びは決定的に違っているともいえます。
« ミドリグンバイウンカ | トップページ | アワビ »
「植物」カテゴリの記事
- 珍しい花の記事を書きました(2023.06.06)
- 奇数は対称性がいい(2022.07.11)
- てきちょく(2022.06.13)
- ガザニア(2022.05.30)
- ネギ坊主(2022.05.30)
コメント
この記事へのコメントは終了しました。
« ミドリグンバイウンカ | トップページ | アワビ »
ひまわりの種並び方の
excel・VBAありがとう
ございます。
実際excelでグラフに描くと
中央は密で外周は疎です。
実物のひまわりは
外周まで種がいっぱいです
さらに何か工夫が必要でしょうか?
投稿: 秦野太郎 | 2013年8月19日 (月) 20時29分
難しい問題ですね。数学的な「点」と本物の「実数」が無限桁で扱えたら、自己相似的になって、中心付近をいくら拡大しても同じ図形が出てくるはずなのです。混み合うことはないんですけど。
差し当たって、for~next ループを1000回まわさず、100とか200くらいに減らして、グラフ描画のマーカーのサイズを2まで小さくしてみてください。多少はなんとかなるかなぁ。そうすると、中心部の混み合いは解消するとして、外側はすかすかになるでしょうね。現実は厳しいです。
投稿: かかし | 2013年8月21日 (水) 08時22分