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

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

任意の点を中心に、拡大・縮小

2010年09月13日 17時56分27秒 | ソフト開発日記
前回、円弧の拡大・縮小がうまくいかないとか言ってましたが
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で割ったらそれっぽくなりました。

でもなんかちょっと変な挙動。
もうちょっと自力で考えてみてうまくいかなかったら
そういうアルゴリズム普通にありそうだから調べてみよう。

最新の画像もっと見る