Draw の再帰呼び出しの意味を教えてください。 遠山の金 2003/05/16 20:51:48 └点を打っているのはgasket(10)が実行される... 白石和夫 2003/05/16 22:24:15 ├早速のご回答ありがとうございます。 遠山の金 2003/05/16 23:11:11 └試行錯誤しながら、動きを確認してみました... 遠山の金 2003/05/17 17:50:38 ├TRANSFORMの各要素を用いてどう変換されるか... 白石和夫 2003/05/17 18:48:53 └変換に対して行列の各要素がどう用いられる... 白石和夫 2003/05/19 10:44:57 └ありがとうございます。これで完璧(??)... 遠山の金 2003/05/20 11:49:01
Draw の再帰呼び出しの意味を教えてください。 遠山の金 2003/05/16 20:51:48 ツリーへ
Draw の再帰呼び出しの意味を教えてください。 |
返事を書く |
遠山の金 2003/05/16 20:51:48 | |
十進BASICの初心者です。Picture定義のサンプルに下記のような サブルーチンがあり、gasket(1)で呼び出されるとき、なにが起こるのかどうもよくわかりません。 gasket(1)⇒gasket(2)....⇒gaket(10)になって 座標(0,0)に点が打たれる、とそのあとgasket(10)を呼んだgasket(9)にはいったいどんなことがおこるのでしょうか? 初心者のぼやきですが、どなたかおしえていただけませんか? 200 PICTURE gasket(n) 210 IF n=10 THEN 220 PLOT POINTS: 0,0 230 ELSE 240 DRAW gasket(n+1) WITH SCALE(1/2) 250 DRAW gasket(n+1) WITH SHIFT(-2,0)*SCALE(1/2)*SHIFT(2,0) 260 DRAW gasket(n+1) WITH SHIFT(-1,-SQR(3))*SCALE(1/2)*SHIFT(1,SQR(3)) 270 END IF 280 END PICTURE |
└点を打っているのはgasket(10)が実行される... 白石和夫 2003/05/16 22:24:15 ツリーへ
Re: Draw の再帰呼び出しの意味を教えてください。 |
返事を書く |
白石和夫 2003/05/16 22:24:15 | |
点を打っているのはgasket(10)が実行されるときだけです。 gasket(9)では,座標を変換してgasket(10)を呼び出しています。 同様に,gasket(8)は,座標を変換してgasket(9)を呼び出しています。 つまり,打っている点は,gasket(10)から見ればいつも(0,0)ですが,最初にSET WINDOWで設定した座標系でみれば(0,0)ではありません。 参考 pictureの実行中は,現在変形という名の変換行列が関連付けられています。DRAW文でpictureを呼び出すと,現在変形と,draw文で指定した変形との積を現在変形としてpicutreを実行します。plot文は,指定された座標に現在変形を行って描画します。呼び出しが終われば,現在変形は元に戻ります。 現在変形は予約語TRANSFORMで取得できます。 DIM a(4,4) MAT A=TRANSFORM MAT PRINT A を200行の次に追加して順にトレースしてみれば,各回のgasket実行時に現在変形がどうなっているか分かります。 参考文献 自己相似図形を利用する幾何教育の可能性 http://www.bunkyo.ac.jp/faculty/kyouken/shiraishi/shiraishi.html |
├早速のご回答ありがとうございます。 遠山の金 2003/05/16 23:11:11 ツリーへ
Re: 点を打っているのはgasket(10)が実行される... |
返事を書く |
遠山の金 2003/05/16 23:11:11 | |
早速のご回答ありがとうございます。 なるほど、座標が変換されているのですね。 まだ動きをスムーズに頭でトレースできていませんが、 わかったような気がします。 |
└試行錯誤しながら、動きを確認してみました... 遠山の金 2003/05/17 17:50:38 ツリーへ
Re: 点を打っているのはgasket(10)が実行される... |
返事を書く |
遠山の金 2003/05/17 17:50:38 | |
試行錯誤しながら、動きを確認してみました。 nを変えたり、!をつけて辺だけを描かせてみたり。こういうことが簡単にできるのが、十進BASICの便利さですね。改めて感心しました。 Pictureの中の2番目のDrawは with SC(1/2)*SH(1,0) と同じ効果と思いますが、SH(-2,0)*SC(1/2)*SH(2,0) とするのは意味があるのでしょうか? (数学的に or 処理系の速さ?) もうひとつ、TRANSFORMの各要素と座標系との関連がうまく結びつきません。なんで(4,4)なのかもわからない始末です。 |
├TRANSFORMの各要素を用いてどう変換されるか... 白石和夫 2003/05/17 18:48:53 ツリーへ
Re: 試行錯誤しながら、動きを確認してみました... |
返事を書く |
白石和夫 2003/05/17 18:48:53 | |
TRANSFORMの各要素を用いてどう変換されるかについては,ヘルプにも最小限のことが書いてあります。多少,数学的な解説は,「数学とコンピュータ2」(森北)に記述したつもりです。4行4列の行列を用いる理由はJISの規格書を見ると分かります。 with SC(1/2)*SH(1,0) とせずに SH(-2,0)*SC(1/2)*SH(2,0) とするのは,分かりやすさを優先したからです。十進BASICは翻訳時に計算できる組込み関数は翻訳時に計算してしまうので,速さはほとんど変わらないと思います。 |
└変換に対して行列の各要素がどう用いられる... 白石和夫 2003/05/19 10:44:57 ツリーへ
Re: 試行錯誤しながら、動きを確認してみました... |
返事を書く |
白石和夫 2003/05/19 10:44:57 | |
変換に対して行列の各要素がどう用いられるかは,ヘルプの 手続き定義−行列による変形 を見てください。 |
└ありがとうございます。これで完璧(??)... 遠山の金 2003/05/20 11:49:01 ツリーへ
Re: 変換に対して行列の各要素がどう用いられる... |
返事を書く |
遠山の金 2003/05/20 11:49:01 | |
ありがとうございます。これで完璧(??)にわかりました。 ヘルプを通読もせずにすみません。ご親切に感謝します。 |