フラクタルで木を作る方法

フラクタルで木を作る方法

注意:フラクタルで遊び始めると、病みつきになることがあります。なぜかは分かりませんが、こういうものを作るのはめちゃくちゃ楽しいんです。実は、フラクタルに興味を持ち始めたのは、#TeamTrees チャレンジというプロジェクトに参加した時でした。2020年までに2000万本の木を植えるための資金を集めるというプロジェクトです。(目標は達成しました!)

フラクタルと木にはどんな関係があるのでしょうか?ちょっと待ってください、一歩ずつ見ていきましょう。フラクタルを使って木を作る方法をお見せしますが、その前に少し寄り道して、再帰の概念について見ていきましょう。

再帰とは何でしょうか?例を挙げて説明しましょう。ある数nの素因数を求めたいとします。例えばn = 12 とします。これは頭の中で計算できます。2 x 2 x 3 = 12 で、これらはすべて素数です。しかし、 n = 1,234,533 だったらどうでしょうか?そのためには、何らかの方法が必要です。任意の数の素因数を生成するためのレシピを以下に示します。

  • nを2で割る。余りがない場合は2を因数として書き記す。
    • リセットn = 除算の結果 (n/2)
  • 新しい番号で上記の手順を繰り返します
    • 2で割って余りが出るまで続ける
    • 除数を1増やします(つまり、2 + 1 = 3)
  • 新しい数を 3 で割ります。余りがない場合は、3 を因数として書き留めます...

などなど。この基本ルーチンを繰り返し実行し、各ステップでnを調整し、除数を増やしていき、除算の結果が2未満になったら完了です。それでは、このアルゴリズムをPythonスクリプトに書き込んでみましょう。

再生ボタンをクリックして実行してみましょう。おや!1,234,533 の素因数は 3、79、5,209 でした。この数字はランダムに選んだだけなので、こんなに大きな素因数を持つのはすごいですね。このスクリプトは、自分で作った奇妙な数字でも実行できます。鉛筆アイコンをクリックして、15行目に何か入力してください。

とにかく、ここで注目すべきは、それがどのように動作するかです。演算を実行するために「pfact」という関数を作成しましたが、その関数の定義は実際には自分自身を呼び出しています(11行目)。これが再帰です。このネスト構造を作ることで、非常に少ないコードで複雑な計算を行うことができます。これがうまく機能するのは、ある意味驚くべきことです。

野生の再帰

では、フラクタルとは一体何でしょうか?フラクタルとは、スケールが異なっても同じように見えるパターンのことです。自然界ではどこにでも見られます。海岸線を見てください。湾や川、半島がたくさんあります。小さな部分を拡大すると、より滑らかになりますか?いいえ、近くで見ると、小さなスケールでも同じギザギザの形が見られます。

この自己相似性は樹木にも見られます。幹から上に向かって進むと、幹はいくつかの部分に分かれます。これを枝と呼びます。これらの枝の一つを辿っていくと、その枝も前の枝と似た形で分岐します。樹木の各枝は、それ自体が小さな樹木の形をしています。つまり、樹木はフラクタルのようなものです。つまり、フラクタルを用いて樹木をモデル化できるということです。

木のフラクタルを作る準備が整いました。GlowScriptとPythonを使ってこのフラクタルを作る方法をご紹介します。もちろん、他にも方法はあります。PythonとTurtleで作りたい方は、こちらのチュートリアルをご覧ください。

このツリーフラクタルの基本的な計画は次のとおりです。

  • ある地点から出発し、ある方向に一定の距離を移動します。
  • その時点で分岐を作り、右に少し角度を変えてから、前のステップを短い距離で繰り返します。(再帰!)
  • 戻って左に曲がり、もう一方の分岐を作ります。(再び再帰です。)

このコードは実際に解読してみるまで、おそらく本当の意味で理解できないでしょう。それでは、これが私の最初のツリーフラクタルです。これを実行して、いくつか変更してみてください。鉛筆アイコンをクリックすると、コードが表示され、編集できます。

ベクトルと円柱について簡単に説明します。各分岐は3次元の円柱なので、コードの一部が分かりにくいかもしれません。GlowScript Pythonで円柱を作成する場合、開始位置(3次元空間のベクトル)と、円柱の始点から終点を指すベクトルの2つが必要です。コードでは、この始点を指すベクトルが変数aで、分岐ごとにこのベクトルが回転します。

分岐

ベクターについてはもう十分です。何かクールなものを作ってみましょう!木をもっと木らしくしたい場合はどうすればいいでしょうか?変更できる点をいくつかご紹介します。

  • 連続するブランチを一定の長さだけ短くする代わりに、各反復で 25 パーセントずつ比例して短くすることができます。
  • 枝の太さを長さに比例させることができます。
  • 一番小さい部分を緑色にし、大きい部分を茶色にすることができます。

新しいツリーはこんな感じです。あ、コードはこちらです。

フラクタルから作られたイラスト付きの木。

イラスト: レット・アラン

でもちょっと待ってください!この木は2次元です。3次元の木はどうでしょう?ランダム性を加えた木はどうでしょう?ええ、どちらもより見栄えの良い(よりリアルな)木になりますが、これは宿題として残しておきます。

フラクタルツリーはただの遊びなのでしょうか? まあ、そうだとしても、どうでもいいでしょう? 楽しいのは良いことです。最初のフラクタルはおそらくそのように作られたのでしょう。しかし、フラクタルツリーには実際に実用的な用途があります。その一つがデジタルアニメーションです。CGI映画の森のシーンを制作するとしましょう。(a) 全ての木を個別に描きますか? (b) 一本の木を描いてそれを再現しますか? それとも (c) コンピューターを使ってフラクタルツリーを生成しますか? フラクタルです!

もう一つ、とても素晴らしい使い方があります。それは、木が吸収する二酸化炭素量を推定することです。基本的な考え方は、特定の木の枝分かれパターン(枝間の距離と幅の変化)を測定することです。これにより、木全体を測定するのではなく、木の構造の「ルール」が得られます。これらのフラクタルな枝分かれルールで木がどのように構築されるかがわかれば、木全体の特性もわかります。これはとてもクールだと思います。


WIREDのその他の素晴らしい記事

  • マーク・ベニオフによる富の福音
  • STEM教育の蒸気を愛するようになった経緯
  • テクノロジー系仏教徒を批判したいなら、まずこの本を読んでください
  • 5700年前のガムが噛み手について明らかにするもの
  • 「クソロボットの女王」が王座を放棄した理由
  • Amazon、Google、Microsoft のうち、最も環境に優しいクラウドを持っているのは誰か?
  • 👁 AIという分野は近いうちに「行き詰まり」を迎えるのか?さらに、人工知能に関する最新ニュースも
  • 🏃🏽‍♀️ 健康になるための最高のツールをお探しですか?ギアチームが選んだ最高のフィットネストラッカー、ランニングギア(シューズとソックスを含む)、最高のヘッドフォンをご覧ください。