2018-12-16IFSを使ってフラクタルを書くsellprocessing独楽回しeddyと申します。2018の16日目を担当させていただきます。以前からこういう事はやってみたかったのですが、実際何を書いたら良いのかは結構悩みました。周知の事で今更書く事ではないかもなんて考えもしましたが、過去に理解するのに時間がかかった事なので、書く事にしました。テーマはフラクタル図形です。これをIFSを使って書いてみます。Reas氏らによって作られたグラフィック面に特化した言語。自分個人としては、簡単に書ける点や出力が目に見える形で表れる点、数学など様々な知識を組み合わせると面白いものが手軽に出来てしまう点から、初めてプログラミングを習う方に最適なんじゃないかなと思ってます。Systemの略です。これを使う事によって、フラクタル図形を手軽に描く事が出来ます!例えばシダの葉状のフラクタル図形をIFSで書こうとすると次のようになります。以下の2式を用います。\\今の次の座標を今の座標から求めて、求めた座標に点などを描画します。描画した座標を今の座標として、また次の座標を求めて描画...これを繰り返しています。係数(a,b,c,d,e,f)については次のように決まります。85%係数はa~fまで、このように4つのSetとして決められています。_)m)どのSetを使うかは確率が決められている場合があります。ここでは、Set1は1%の確率、Set2,3は7%の確率、Set4は85%の確率となっていて、ほぼほぼSet4を使うようになっています。実際にProcessingで実装してみたときのソースコードはこちらとなっています。//通常は左上が(0,0)なので、中心を合わせる。height/2+height/4にすると個人的にいい感じだったので。//求めた次のY座標を今のY座標とする}なるべくコメントを書いたつもりですが、もし見辛かったらすみません。Processingで円や点を描く事自体はとても簡単なので、このような事をするには大変向いています。コメントにも書きましたが、Processingでは左上隅が(0,0)で画面右がXの+方向、画面下がYの+方向です。そのため、見た目を合わせるために符号を変えたりtranslate()で原点を変えたりして調整しています。描画部分ellipse()の中で座標に40を掛けていますが、これも全体の大きさを調整するための値です。何も掛けずに描画すると値自体は大きくないので結果的に1点に集まっているように見えてしまうのでこのようにしています。人それぞれ見易さとかあると思うので、それは各々で調整していただければと思います。色も今回は黒と白でシンプルにしました。最終的な結果は以下のようになります。プログラムを実行すると、徐々にこれに近づくように点が描画されて行きます。全体の形と一つ一つの葉の形が大きさ以外同じなのが分かります!式自体はそれほど難しい訳ではないのに、このような形が描画されるのは本当不思議だなと思います!今回はシダの葉状のフラクタルを描画してみましたが、他にも色々なIFSはあります!しかし、係数や確率などの違いはあれど、「確率で係数のSetを選び、式に当てはめて今の座標に使って次の座標を計算する」という根幹は変わらないと思われるので、色々調べて試してみてはいかがでしょうか?ここでは12月にちなんで、雪の結晶とクリスマスツリーをIFSで描いた物を載せます!これは以下のリンクに載ってます。http://paulbourke.net/fractals/ifs/まとめ今回Processing上でIFSを使ってフラクタルの描画を行ってみました。