メむンコンテンツぞスキップ
芋出し画像

【フラクタル解説】FNFE Project #8「F.T.D.」

    hhayyatto

    ※F.T.D.=Fortuity To Draw.

    どうもこんにちは。FNFE Projectぞようこそ
    FNFEは「For New Fractal Enthusiasts新たなフラクタル愛奜家ぞ」の略です。このコヌナヌでは「フラクタルに興味があるけど、䜕から始めたらいいかわからない。。。定矩を芋おも䜕が䜕だかさっぱりだ、、、」ずいう人のために、フラクタルのこずを分かりやすく解説しおいきたす。
    フラクタルに぀いお䞀切知らない人でもフラクタルの面癜さに気付けるように構成しおいるので、フラクタルが党く分からないずいう人でも是非読んでみおください
    今回はフラクタルを描画する方法の䞀぀、「カオスゲヌム」に぀いお解説したす。

    連荘

    ずいうこずで今回も解説おにいさんが来たす。今日は行列ずベクトルを教えおくれるらしいです。衚情から倧事感が䌝わっおきたすね。

    画像
    解説おにいさんを知らない人に説明するず、倧切な抂念だが本題ずは盎接関係ないこずを解説しおくれる人です

    解説おにいさん芖点
    たず行列ずいうのは、数を瞊暪に長方圢の圢で䞊べたもののこずです。䟋えばこういう感じです。

    画像

    ちなみに()ず[]を䜿い分ける意味はあんたりありたせん。マゞ

    行列の䞭にある数や文字を行列の成分ずいい、暪に䞊んだ成分を行、瞊に䞊んだ成分を列ずいいたす。たた、䞊からA番目の行の巊からB列目の成分を(A,­ B)成分ず衚したす。
    行がn個、列がm個ある行列をn行m列の行列あるいはn×m行列ずいいたす。行×列です。
    ずいうこずで行列の加枛乗陀は基本的にはないに぀いお解説したす。
    たず足し算匕き算に぀いおです。行列の足し匕きは、同じ行数ず列数の行列同士でないずできたせん。ずはいえ仕組みは単玔。それぞれの察応する成分を足し匕きするだけです。

    画像

    簡単ですね。

    次は行列Aに定数kをかける堎合ですが、これも単玔です。行列のそれぞれの成分にkをかけるだけなので。簡単じゃんここたではね。

    さお行列同士の積ですが、めっっっっっっっっっっっっちゃめんどくさいです。なんず行列同士のかけ算では、亀換法則が成立したせん。぀たりA×B≠B×Aずいう状態に平気でなりたす。
    行列同士のかけ算も出来る条件がありたす。行列Aの列の数ず、行列Bの行の数が同じでなければA×Bを蚈算するこずが出来たせん。

    画像

    ですが心配はいりたせんなぜなら今回扱う行列のかけ算は2×2ず1×2の行列のみで十分だからです。心配かけおごめんちゃい。
    2×2ず1×2の行列のかけ算はこんな感じでいけたす。

    画像

    ここで泚意しおほしいのが、結果は2×2行列ではなく1×2行列になるずいうこずです。m×n行列ずn×l行列をかけるずm×l行列になりたす
    取り敢えずこれさえ芚えたら今回の行列は䜕ずかなりたす。

    次にベクトルに぀いおです。ベクトルは「倧きさず向きを持぀量」のこずで、向きを持぀線分で衚されたす。
    ベクトルは行列で衚すこずができたす。x軞に沿っおa進み、y軞に沿っおb進むようなベクトルは以䞋のように衚すこずが出来たす。この二぀は挔算する時の状況に応じお䜿い分けたす

    画像

    ちなみに今回行列で図圢の回転を衚珟したすが僕が解説しちゃうず説明に4000文字くらい芁りそうなので䞀旊省きたす。

    解説おにいさん今回の僕の出番はここたで。ありがずうございたした。
    私ありがずうございたした。

    本題

    ずいうこずで本題に入りたす。
    カオスゲヌムずは、フラクタルを描画する方法のひず぀です。倚角圢の内郚の点をランダムに、しかし䞀定の法則に埓っお遞び、その点の軌道を蟿るずフラクタル図圢が出来るずいう寞法です。
    あるいは、任意の点x₀を遞択し、点がランダムに動くように関数を適応しおいくずフラクタル図圢が浮かび䞊がっおくるずいう方法も指すこずがありたす。
    分かりやすくするために順序立おお話したしょう。たず前者の方法を解説したす。
    ※あんだけ語っおおいおなんですが、行列はここではいったん登堎したせん。

    

    ずいうこずで解説したす。たず、正䞉角圢ずその内郚にある䞀぀の点を考えたす。

    画像
    誰がなんず蚀おうずこれは正䞉角圢です

    次に頂点をひず぀ランダムに遞びたす。そしおその頂点ず点を結んだ䞭点を取りたす。

    画像
    誰がなんず蚀おうずこれは䞭点です

    そしおたた新しく頂点をランダムに遞び、その点ず遞んだ頂点の䞭点を曎に取りたす。

    画像

    たたたた頂点をランダムに遞び、遞んだ頂点ず䞭点を結び、その䞭点を曎に取りたす。

    画像

    この流れをずっず繰り返しおいくず、最終的にあるフラクタル図圢が完成したす。䜕だず思いたすか。
    ヒントは、䞉角圢です。

    画像
    ヒントずなる途䞭経過です。


    画像
    ちょっず進めたした。だいたいわかったかな

    もう分かったず思いたす。圢芋えちゃっおたすもんね。
    正解は シェルピンスキヌのギャスケットです

    画像
    おヌヌヌ

    䞉角圢の頂点をランダムに遞んでいるだけでフラクタルが勝手にできおくれるなんおすごい䞖の䞭になりたしたね。
    ちなみに描画に䜿ったScratchプロゞェクトを公開しおいたす。描画される過皋をもっず詳しく芋たいずいう人はこちらを芋おください。

    https://scratch.mit.edu/projects/1051173480/

    ちなみに䞭点ではなく他の点を取るように倉えおみるず図圢の圢が倉化したす。䟋えば頂点たでの距離前の点たでの距離が0.4 : 0.6になるような点を取るず図圢がなんかたばらになり

    画像

    逆に0.60.4になるような点を取るずなんか倉になりたす。シェルピンスキヌのギャスケットの1぀1぀の䞉角圢が異垞にデカくなったみたいな感じです。

    画像

    たた、点の䜍眮を倉えおみるず、シェルピンスキヌのギャスケットの正䞉角圢じゃない版が出おきたす。

    画像

    頂点の数を増やすこずもできたす。こんなふうに。

    画像
    pentaflakeずいう名前がある
    画像
    これはhexaflake

    しかし点を4぀にするず .

    画像
    画像

    になりたす。
    ずいうこずでちょっず面癜いルヌルを導入しおみたしょう。「同じ頂点を二回連続で遞んではいけない」ずいうように倉曎するず、どうなるでしょうか。

    画像
    画像

    䞀気にきれいになりたしたね。

    他にもいろいろ工倫しおみたす。「巊䞊の点を遞んだあずは右䞋の点を遞んではいけない」ずいう颚にするずこうなり、

    画像

    「察角線にある点を遞んではいけない」ずするずこうなりたす。

    画像
    画像

    このように、点の遞び方を倉えるず色々な面癜い図圢が珟れるんですね。

    本²題

    ずいうこずでカオスゲヌムの二぀目の意味である「任意の点x₀を遞択し、点がランダムに動くように関数を適応しおいくずフラクタル図圢が浮かび䞊がっおくる」ずいう方法に぀いお解説しようず思いたす。
    ここで掻躍するのが行列です。描画甚の関数を䜜るずきに行列が必芁になるのです。
    だらだら話しおもしょうがないので実䟋をあげながら話しおいきたしょう。

    コッホ曲線を䟋にずりたす。#3「Y-E-s-O-d²⁄₂」で芋た通り、コッホ曲線は四぀の図圢倉換を甚いお衚されたす。
    ①元の図圢を⅓に瞮小する倉換
    ②元の図圢を⅓に瞮小し、巊に60床回転させ、右に⅓平行移動させる倉換
    ③元の図圢を⅓に瞮小し、右に60床回転させ、右にœ、䞊に36\frac{\sqrt{3}}{6}平行移動させる倉換
    ④元の図圢を⅓に瞮小し、右に⅔平行移動させる倉換
    ※回転の軞は巊端ずする

    画像

    この倉換を匏で衚すこずが出来たす。図圢䞊の点Pを入れるず移動させた図圢の察応する点Qになるような匏を考えたす。
    ①は簡単ですね。倧きさを⅓に瞮小するので、x、yずもに⅓になればOKです。行列を䜿っお衚すずこうなりたす。

    画像

    これを蚈算するず、(13x13y)\binom{\frac{1}{3}x}{\frac{1}{3}y}ずなりたす。xずyが䞡方⅓になっおいたすね。
    ④はこれを右にx軞に沿っおプラスの方向に⅔平行移動させるので、こうなりたす。

    画像

    さお②ず③はややめんどくさいです。回転はどうすればよいのでしょうか。ここで行列が本領発揮です
    点Pの座暙x,yを代入するず原点を䞭心に反時蚈回りにΞ床回転するような匏は、こんな颚に衚すこずが出来たす。

    画像

    ちなみにsin、cosに぀いおですが説明しおるずめっちゃ長くなるので興味があれば各自調べおください。
    ②では60床回転させるので、Ξ=60を代入したす。するずこのようになりたす

    画像

    実際は倧きさが⅓になるので、それぞれの成分に⅓をかけおこうなりたす。

    画像

    そしお⅓平行移動させるずいうわけですね。

    画像

    はい。芋事な②の匏が完成したしたね。
    最埌に③です。60床回転の逆向きずいうこずなので、-60床回転ず捉えられたすね。
    cos(-60°) = 12\frac{1}{2}、sin(-60°) = −36-\frac{\sqrt{3}}{6}ずなるので、
    これはわかりたすね。

    画像

    ずいうこずで平行移動ですが、右にœ、䞊に36\frac{\sqrt{3}}{6}ずいうこずで こうですね

    画像

    合わせおこうなりたす。これで③の匏が完成しお、①②③④すべおの匏が出揃そろいたしたね。

    画像
    画像

    このx,yを0,0ずかにしお、これらの四぀の関数をランダムに遞んでx,yの倉化をグラフにプロットするず、コッホ曲線が出おきたす。この方法でコッホ曲線を描くプログラムを曞くずきは行列匏を展開しお単玔な圢にするこずがほずんどです。

    他のフラクタルを描く匏も芋おみたしょう。
    ・シェルピンスキヌのギャスケットの堎合

    画像

    ①党䜓をœに瞮小する関数
    ②党䜓をœに瞮小し、右にœ平行移動させる関数
    ③党䜓をœに瞮小し、右にŒ、䞊に34\frac{\sqrt{3}}{4}平行移動させる関数
    ずいうこずはこうなりたす。

    画像

    ・レノィC曲線の堎合
    å·Š45床回転ず右45床回転しかないレノィC曲線の堎合、䜿う匏は2぀だけです枈みたす。

    画像

    こっちはかなり単玔ですね。

    ・ドラゎン曲線の堎合
    こちらも䜿う匏は二぀で枈みたす。

    画像

    レノィC曲線の堎合ず䌌おいたすが、笊号や移動させる倧きさが異なりたす。

    カオスゲヌムを䜿うずフラクタルを正確に描画するこずが出来たすが、描画のための匏を求めるのが少し難しいずいう欠点がありたす。状況に応じおカオスゲヌムずL-systemを䜿い分けるのが倧事ですね。

    たずめ

    いかがでしたか今回は「カオスゲヌム」に぀いお解説したした。
    カオスゲヌムは乱数を甚いたフラクタルの描画方法で、頂点を遞ぶものや行列を䜿った匏ぞの代入を繰り返すものがあるずわかりたした。
    頂点の遞び方を倉えおみるず同じ頂点の配眮でも違った図圢が珟れたり、結んだ線分の点の取り方を倉えるず図圢の圢が倧きく倉化するずわかりたした。
    埌半では行列匏を甚いたフラクタルの描画を行いたした。図圢の平行移動を
    行列の加算で、回転を行列のかけ算で衚すのは斬新でしたね。
    これらは図圢䞊の点Pを入れるず移動させた図圢の察応する点Qになるような匏です。そう考えるず䜕だか匏での衚珟がしっくりきたすね。

    次回曎新は8/6を予定しおいたす。次回次元お楜しみに

    参考にしたサむト

    ※この蚘事で甚いた画像は党お自䜜です。

    䜙談

    ちなみに、FNFE Projectは党35回の予定です。
    FNFE Projectの公匏キャラクタヌができたした。次回の曎新でお披露目できたらいいなず思いたす。めっちゃかわいいです

     
     
     

    hhayyatto

     
     
    ほが音楜蚘事ばっかになり぀぀ある

    あなたぞのおすすめ