NISHIO Hirokazu[Translate]
原点中心の拡大縮小平行移動を画面中央中心に変換する
画像のドラッグ結果を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));

となる。


"Engineer's way of creating knowledge" the English version of my book is now available on [Engineer's way of creating knowledge]

(C)NISHIO Hirokazu / Converted from [Scrapbox] at [Edit]