- 追加された行はこの色です。
- 削除された行はこの色です。
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)