[ プログラミング演習(Ruby) >  プログラミング演習(Ruby) 課題(2025) >  [課題24] パラメトリック平面曲線 ]

[課題24] パラメトリック平面曲線

課題

以下の説明にしたがって,タートルグラフィクスで,指定されたパラメトリック平面曲線を描くメソッドを作成し,同じファイルの中でそのメソッドを使って適当な曲線を描くプログラムを作成して,プログラムを提出してください.

もくじ

  1. パラメトリック平面曲線
  2. 曲線描画メソッドの仕様
  3. プログラムテンプレート
  4. Tips
  5. サンプルプログラム

パラメトリック平面曲線

パラメトリック平面曲線は, パラメタの値を定めるとそれに対する曲線上の点が1点決まるように表現されます. たとえばtをパラメタとしてp(t)を次のように定義すると,原点中心の楕円が表現できます(a≧b>0).


  p(t) = (x(t),y(t)) 
         x(t) = a・cos(t) 
         y(t) = b・sin(t)
   

p(t) = (x(t),y(t))がパラメタの値がtのときの楕円上の点の位置を表しています.

注意:: ここでは数学での式として記述しています.プログラムでは上のようには表記できません

曲線描画メソッドの仕様

曲線描画メソッドは,次の3つをデータとして受け取るものとします.

  1. 曲線を表すデータ(Procあるいはブロック)
  2. 描画対象とするパラメタの区間
  3. 描画の精度を表す数(区間の分割数)

具体的には次の[1],[2]のどちらかの形式で定義することにします(どちらか一方で構いません). ここではメソッド名をcurveとしています.


   # [1] 曲線をProcで予め定義して,メソッドの引数として指定する
   # a,bは別途定義してあるものとする
   f = proc { |t| [a*Math.cos(t),b*Math.sin(t)] }
   curve(f,t0,t1,m)

   # [2] 曲線をブロックで指定する
   # a,bは別途定義してあるものとする
   curve(t0,t1,m) { |t| [a*Math.cos(t),b*Math.sin(t)] }

引数t0,t1,mの意味は次の通りとします.

t0曲線の描画開始位置に対応するパラメタの値
t1曲線の描画終了位置に対応するパラメタの値
mパラメタ区間の分割数

dt=(t1-t0)/mとして, パラメタtについて,t0≦t≦t1の区間において,t = t0,t0+dt,t0+2dt,...に対応する曲線上の点を線分で順につないでいくことで近似的に曲線を描くことにします.

なおt=t0のときの曲線上の点(P0とします)の位置と,曲線描画メソッドを呼び出したときの亀の位置が異なっている場合には,曲線描画メソッドにおいて, 点P0まで線を描かずに移動してから,曲線の描画を開始することにします.

曲線の描き方に関する補足(座標系の設定)

亀の向きに関わらずキャンバスの座標軸をx軸,y軸として キャンバスの左下角を原点として曲線を描けばよいことにします.

亀の向きを基準として座標軸をとって,原点は描画開始時の亀の位置として描いてもよいでしょう.

プログラムテンプレート

次に示すプログラムのテンプレート(雛型)を適宜名前を変えて使ってください.

Tips

サンプルプログラム

次のページにサンプルプログラムを示します. プログラムをブラウザの画面で開いたときに文字化けしてしまう場合には, ダウンロードしてEmacs等で開いてみてください.

[ プログラミング演習(Ruby) >  プログラミング演習(Ruby) 課題(2025) >  [課題24] パラメトリック平面曲線 ]