ソフトウェア開発したい日記

「面白い!」と思った頭の体操や、数学の問題を載せていきます
その他ロードバイクででかけた先の写真や、ソフト開発のメモ等

JavaでdrawArcで描いた円弧がちょっとズレちゃう

2010年10月08日 20時04分33秒 | ソフト開発日記
drawArc()メソッドを利用して描くと、
ちょっとだけ始点、終点がズレちゃう現象が起こりました。

どこかで計算間違えたかさんざん検算した結果、おかしいところは見つからず。

そこでズレちゃう円弧の特徴を調べてみると、
共通して半径が大きいことがわかりました。

半径が大きければ、角度1度に対する弧長もかなり大きくなります。
更に、drawArc()メソッドは引数を整数でしかとることができないため、
小数部分を四捨五入とかしちゃう必要があります。

なので、半径が大きい円弧をdrawArc()メソッドで描くときはズレちゃうことがあると。

引数を浮動小数点数でとれる円弧描画メソッドがないか探したら、ありました。
Arc2Dクラスを利用して、Graphics2Dで作成したShapeを描けば良いらしい。
次のように使いました。

Graphics2D g2 = (Graphics2D)g;
Arc2D.Double buf_arc;
buf_arc = new Arc2D.Double(x, y, width, height, startAngle, arcAngle, Arc2D.OPEN);
g2.draw(buf_arc);

コンストラクタの第7引数は

Arc2D.CHORD・・・始点と終点が直線で結ばれた円弧
Arc2D.OPEN・・・円弧だけ
Arc2D.PIE・・・パイ状

の3つがありました。
結果、Arc2Dを利用することでズレることのない綺麗な円弧が描けました。よかった。