回転した楕円を描く

GWcircle()GWscircle() 関数はどちらも縦または横につぶれた楕円を描くもので、これが斜めにつぶれた(つまりある程度回転させた)楕円を描くことはできない。
そこで以下に回転させた楕円の軌道上の座標点を計算し、GWpolygon() 関数を利用して(非常に頂点数の多い滑らかな)多角形として回転した楕円を描く方法を示す。

以下のサンプルプログラムはそのために作成した GWsellipse() 関数を用いた例である。まずサンプルプログラムを実行して、どのような記述でどのような図形が描かれるのか試すと良い。

サンプルプログラム ellipse.c 結果

プログラム解説

サンプルではそのために回転した楕円(塗る)を描く関数 GWsellipse() を用意し、これを呼び出している。

GWsellipse(x1, y1, x2, y2, r, c)

座標位置 (x1, y1) と (x2, y2) を対向する頂点とする四角形に内接する楕円を、角度 r だけ左回りに回転させた図形を描く。
この角度 r は 0〜360 度までで指定する。
引数 x1, y1, x2, y2, r は float 型。引数 c は整数型で色を指定する。

傾いた楕円

サンプルプログラムでは背景に枠線などを引いているが、必要なのは GWsellipse() の呼び出しただ一行である。利用者は単にサンプルプログラムにある関数 GWsellipse の定義をそのまま利用すれば良いだろう。


Yutaka Yasuda (yasuda@cc.kyoto-su.ac.jp)