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を利用することでズレることのない綺麗な円弧が描けました。よかった。
ちょっとだけ始点、終点がズレちゃう現象が起こりました。
どこかで計算間違えたかさんざん検算した結果、おかしいところは見つからず。
そこでズレちゃう円弧の特徴を調べてみると、
共通して半径が大きいことがわかりました。
半径が大きければ、角度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を利用することでズレることのない綺麗な円弧が描けました。よかった。