NetaTaneMenu >>>> [[Xaos]] >>>> Grapesでフラクタル
*Grapesでフラクタル
----
COLOR(red){本校「京都教育大学附属高校」の「応用数学」で実施しているカオスゲーム。V.Bで作っていたものをGRAPESのスクリプト機能を用いて、シェルピンスキーのギャスケットにチャレンジしてみました。by kawasaki}

快適にグラフが作成できる反面GRAPESの限界もあり、何でもかんでも便利な機能になって欲しいという怠け心を持ってしまいます。
さて、
(1)指定した点の数が限られているので,自己相似三角形の個数が絞られてくるのですね。もっとやりたいのですが、頂点Aの近傍にできる三角形までが限界。
(2)ドット(点の大きさ)を更に小さくしてきめ細かさを目指すと少し不便。
(3)三角形→四角形,五角形と進めようとしても(1)の点の指定数に限りがあるので、発展的学習には不向きかも・・・

どなたか「GRAPES」でこの辺の環境を改善できたらお教えください。
※しかし発展・応用へと導くには、VBのようなプログラミングで作るのが当たり前ですよね。

COLOR(#006789){なるべくOSや機種特有の仕様に依存しないという教育方針で考えると,VBよりも10進BASICのほうがよいと思います。再帰的な手続きを使ったシンプルなソースでフラクタルを描画できるのも強み。シェルピンスキー図形の例も下からたどれます。}
http://hp.vector.co.jp/authors/VA008683/

[仕組み]
COLOR(red){適当な点Pを始点にサイコロを振って,1と2が出たらAPの中点を新たな点P、3と4が出たらBPの中点を新たな点P,5と6が出たらCPの中点を新たな点Pとして繰り返し作業をすると・・。中点も1:2に内分したり、2:1に内分したり色々と数値を変えると模様の様子に面白い傾向が出てきます。}

COLOR(#006789){上の手順がよく理解できないので教えてください。まず A,B,C は正三角形の頂点でしょうが,Pの最初の点はどこにあるのでしょうか。「繰り返し作業する」というのは,どういう作業のことなのか。よろしく!}

COLOR(red){ひょっとしてプログラムを作って進ぜようという愛情が向こうの方に見えたりして。10進BASICは、手頃なレベルで良いですね。それでは、ご説明を。Pは平面上のどの点から始めても構いません。できることなら三角形に近い点であれば早く三角形内に入り込んでくれます。例えば1の目が出たとします。線分APの中点が新たな点P1とします。次に、3の目が出たとします。今度は線分BP1の中点をP2とします。次に5の目・・・。サイコロの目はランダムですから何が出るか分からないですから,点Pもランダムに動きます。また一度三角形の中に入り込めば脱出しないはずです。それらの点はいったいどんな模様になるでしょう?それが以下の模様になるという仕組みです。如何でしょうか?これは有名な「カオスゲーム」という教材です。確率や内分・外分の概念、また各三角形の外周の和、面積の和問題(数列の極限)にもなり面白いですよ。本校の「応用数学」の授業で採り入れていて一度公開しました。改めて近いうちに身近な高校の先生にゆっくり説明しようとも思っています。kawasaki2004.8}

         中点
#ref(fractal1.jpg)

    2:1            
#ref(fractal2.jpg)
  1.5:1
#ref(fractal5.jpg)
  1.2:1
#ref(fractal6.jpg)
  1:1.2
#ref(fractal7.jpg)
  1:1.5
#ref(fractal3.jpg)
  1:2
#ref(fractal4.jpg)



COLOR(#006789){ご期待にこたえて(って,実は自分の趣味でやってるだけですが),10進BASICのプログラムを書いてみました。BASIC のソースを触ったのは実に15年ぶり!アルゴリズムそのままの簡単なものです。描いた絵もその下にあります。}

 OPTION BASE 0
 DIM x(3),y(3)
 RANDOMIZE
 LET q = 0.5
 LET  th  = PI*2/3
 LET  r = 8.0
 LET  px0 = 8
 LET  py0 = 9
 SET WINDOW -10,10,-10,10
 FOR i=0 TO 2
    LET  x(i) = r * SIN(i*th)
    LET  y(i) = r * COS(i*th)
 NEXT  I
 SET POINT STYLE 4
 LET  px = px0
 LET  py = py0
 PLOT POINTS: px,py
 SET POINT STYLE 1
 FOR i=0 TO 10000
   LET  k = INT(RND*3)
   LET  px = q * x(k) + (1-q)*px
   LET  py = q * y(k) + (1-q)*py
   SET POINT COLOR k+4
   PLOT POINTS: px, py
 NEXT I
 SET LINE COLOR 11
 FOR i=0 TO 2
   PLOT LINES: x(i),y(i);
 NEXT  I
 PLOT LINES: x(0),y(0);
 END

q = 0.5 のところが内分比です。適当に変えてみてください。他の多角形への拡張もきわめて簡単です。

#ref(scher1.png,center)

COLOR(#000066){適当に変えて,5角形にしてみました。}

#ref(pentagon.png,center)

COLOR(red){家族旅行で3,4日離れていました。僕も色々とinput文を入れたり比の対象を変えたりしてプログラムを弄りました。私にとっては元のソースが非常に分かりやすかったので、変更しながら楽しんでいました。上の図だとq=0.58位ですか?6角形の場合は、0.62位で頂点と頂点が接しますよね。よく目を凝らして拡大みると、コッホ曲線が含まれていることに我ながら気づくのは遅いかな? by kawasaki 8.15.22:00}

COLOR(#000066){あれ?こちらでは上の図の五角形がまさにq=0.62で頂点が接して,六角形ではq=0.67あたりで頂点が接したのですが…}

COLOR(#000066){理屈で考えると,五角形の場合には,τ=(1+√5)/2としたときq=(1+τ)/(1+2τ)=0.6180…,六角形の場合にはq=2/3=0.666…となるのかな。}

COLOR(red){済みません。こちらの数値の読み違えでした。比の対象と図の広がりの関係がが分かりやすいように、qを1−pと勝手に私が置き換えて触ったことと三角形の次は五角形だと思い込勘違いしていました。この図は、四角形であればqを変化させてもあまり面白くないですね。五角形が一番綺麗。七角形以上は平面充填上様子が分かりにくい。(当然か)。となれば今度は同様に空間の問題に発展させたいって気持ち・・・やはりbasicでは無理でしょうね!?このように(「スポンジ」)知りたい場合は、どのようなソフトが良いのでしょうか?}


COLOR(#006789){問題を3次元に拡張したプログラムを書くこと自体は BASIC でも簡単だと思います。しかし結果を表現するには3Dグラフィックスのライブラリがあったほうがよいでしょうね。となると,Mathematica や OpenGL を利用できる C 言語かな。もっとも私はMacにはうといので,Mac のグラフィックスアプリに強い村井さんの登場に期待しましょう。}

COLOR(#000066){無理やりですがエクセルでデータ・セットを作って,gnuplotでプロットしてみました。あんまりきれいじゃないか…でも気分くらいわかるかな?}

#ref(cube.png,center)

COLOR(#006789){ぎゃははは,やりますねえ!私も gnuplot で表示することをちらっと考えましたが,点データの集合で立体フラクタルを表現する勇気がありませんでした(^^)。}

COLOR(#fe891c){なんだか呼ばれていたみたいですが,もう良さそう?ですね。}

COLOR(#fe891c){3Dを見たい(見せたい)という場合,何が見せたいか?がポイントなのでは?例えば一世代前のMacintoshにはグラフ計算機というアクセサリ的ソフトが在って,簡単かつ明快に3次元のグラフを見せてくれました。このソフトの良いところの一つは3次元の場合,グラフが「常に回転している」でした。他にも同種のソフトはあったのかも知れませんが,よくぞ!と思ったものです。「鞍点」なんかは局面が回転しているとすごくわかりやすい。}

COLOR(#fe891c){3次元のものを2次元の紙の上に停めてしまえば,それはもう2次元です。頭で再構成するしかありません。それはそれで,数学教育的には必要なこと?!なんですけど。3次元での様子をネタにしたいときにはそのプロセスって「邪魔」ですよね。これを打開する手の一つは「動く」ではないでしょうか。というわけで,誰かムービーにでもしてください。}

COLOR(#fe891c){蛇足,ですけど。gnuplotはやっぱりどこまでいっても印刷用です。ここはやっぱり「POV-Ray」あたりが登場するのでしょう。フリーウエアですしね。「夏休みの課題」ということでどなたかチャレンジしてみては如何でしょう?}
----
COLOR(#fe891c){ちなみに}

> 猫が3匹、1辺が1mの正三角形の頂点の位置にそれぞれいる。この三角形の中にノミが1匹いた。ノミは、その場の雰囲気で3匹の猫の中から1匹を選び、その猫めがけてジャンプしている。ところが、いつも目測を誤るために、目標とする猫までの半分の距離しか跳ねない。でも一生懸命、猫に近づこうとジャンプを繰り返した。

>さて、ノミは猫にめでたく到達することができるだろうか。また、ノミが着地することができた場所は三角形のどの部分か。またその面積を求めよ。

COLOR(#fe891c){というイメージなんですね?きっと。中でなくても良いということですけど,外はあまりにも広いので,「中」に限定するほうが判りやすいような。}

COLOR(#fe891c){更に蛇足ですが,上の文章は[[数学の部屋:http://web2.incl.ne.jp/yaoki/index.htm]]から抜きました。また別のページではmacintoshのプログラム(十年ほど前なのかなあ?)が置いて在りました。}
----
#ref(cb6.png,center)
----

COLOR(#000066){休みもないのに「夏休みの課題」やってみました。添付できるサイズを超えたので,下記に置きました。}

http://www.h-fukagawa.com/test/3dfractal.html

COLOR(#006789){わあ,すごい!やりますねえ,ぱちぱち}

COLOR(#fe891c){おお!とってもかっちょよいなあ。これは一体何かなあ。廻し方が凝っているのが秀逸かも。(邪魔だとか速い!とか言う人がいても気にしない気にしない。それよか作り方を伝授してください。)}


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS