NISHIO Hirokazu[日本語][English]

原点中心の拡大縮小平行移動を画面中央中心に変換する

画像のドラッグ結果をPaper.jsのキャンバスの平行移動に反映したい。 画像の拡大縮小は原点中心、キャンバスの拡大縮小は画面中央中心なので変換が必要。 画像原点の移動量をvとする。 画像原点が移動していたとしても、例えば画面中央に対してのズームの場合は、キャンバス上での移動はない。 というわけで、原点から画面中央へのベクトルをa、拡大率をs、拡大後のキャンバスのズーム率をzとすると

  • $c ← c - ((s - 1)a + v) / z$

ts

newCenter = currentCenter.subtract(
  rect.center.multiply(s - 1).add(V2(imageLeft, imageTop))
  .multiply(1.0 / newZoom));

となる。

pRegroup-done-2019


(C)NISHIO Hirokazu / Converted from Markdown (ja)
Source: [GitHub] / [Scrapbox]