前回、円弧の拡大・縮小がうまくいかないとか言ってましたが
Math.Roundメソッドによる四捨五入と拡大・縮小のタイミングがズレてただけで
そこ直したらうまくいきました。
今回はマウスのカーソル位置に合わせて、
拡大・縮小を行いたかったのでそのメモ。
difX, difYを、描画位置のズレを示す変数
rangeを現在の倍率を示す変数として、
次のように書いたらうまくいきました。
private void formMouseWheelMoved(java.awt.event.MouseWheelEvent evt) {
int a = evt.getWheelRotation();
int h = this.getHeight()/2;
int w = this.getWidth()/2;
range -= a * 0.5;
difX += a * (w - evt.getX())/2;
difY += a * (h - evt.getY())/2;
repaint();
}
画面の中心座標からのマウスカーソルのズレを計算し、
マウスホイールをどちらに回したかで1又は-1を乗じ
あとよくわかんないけど何となく2で割ったらそれっぽくなりました。
でもなんかちょっと変な挙動。
もうちょっと自力で考えてみてうまくいかなかったら
そういうアルゴリズム普通にありそうだから調べてみよう。
Math.Roundメソッドによる四捨五入と拡大・縮小のタイミングがズレてただけで
そこ直したらうまくいきました。
今回はマウスのカーソル位置に合わせて、
拡大・縮小を行いたかったのでそのメモ。
difX, difYを、描画位置のズレを示す変数
rangeを現在の倍率を示す変数として、
次のように書いたらうまくいきました。
private void formMouseWheelMoved(java.awt.event.MouseWheelEvent evt) {
int a = evt.getWheelRotation();
int h = this.getHeight()/2;
int w = this.getWidth()/2;
range -= a * 0.5;
difX += a * (w - evt.getX())/2;
difY += a * (h - evt.getY())/2;
repaint();
}
画面の中心座標からのマウスカーソルのズレを計算し、
マウスホイールをどちらに回したかで1又は-1を乗じ
あとよくわかんないけど何となく2で割ったらそれっぽくなりました。
でもなんかちょっと変な挙動。
もうちょっと自力で考えてみてうまくいかなかったら
そういうアルゴリズム普通にありそうだから調べてみよう。