扇形を描く

今度は「扇形」を描く命令を考えましょう。扇形は、円(楕円でなく真円)の中心から切り込みを入れて抜き取った図形です。いわゆる(切った後の)ケーキを上から見た形ですね。

この図形の境界は周りの「円弧」と切り込みの「線分」でできています。「円弧」の曲線を描く命令は、 2(b) 節で既に扱っているので、これを再利用しましょう。

# 「母艦の100,100と200,200からPI/3だけ扇形」のように使う
●扇形({グループ=?母艦}OBJのX0,Y0とX1,Y1からαだけ|OBJにY0でY1よりαまで)
 Rとは数値。θとは数値。Iとは数値。
 (X1-X0),(Y1-Y0)をR,θへ極座標変換
 Δθとは数値=α/分割数
 点列とは配列。
 点列[0][0]=X0。点列[0][1]=Y0
 点列[1][0]=X1。点列[1][1]=Y1
 Iを2から分割数+1まで繰り返す
  θにΔθを直接足す
  点列[I][0]=X0+R*COS(θ)
  点列[I][1]=Y0+R*SIN(θ)
 点列[I+1][0]=X0。点列[I+1][1]=Y0
 OBJに点列で折れ線

中心点からの線分が 2 本必要なことに注意してください。

演習問題

退屈している人の為に、3 節で扱ってきた内容の復習と応用も兼ねて、演習問題を出しておきましょう。敢えて難しめです。

扇形は「真円」から切り取った図形だが、同じように「楕円」から切り取った図形を描く命令について、以下の考察をして実際にプログラムを書け。 (1) 命令にどのような引数を与えればよいか? (2) どのように点列を計算すればよいか? (3) そうして作った命令の表現力は十分か?例えば、その命令を使い楕円を 3 つの領域に色分けして描けるか?

腕に自信のある人は、これを「ケーキを切り分ける」命令だと思って「ケーキ」グループのようなものに拡張してみるのも面白いかもしれません。何をプロパティにして何をメソッドにすればいいか、点列のデータをメモ化できないか等々、課題はいくらでもありますよ。