てけとーぶろぐ。

ソフトウェアの開発と、お絵かきと、雑記と。

マウスホイールでの拡大縮小を考える。(2)

前回の続き。

Windowsアプリでよく見る Ctrl + マウスホイール での拡大表示の
拡大率を現実世界をモデリングして求めてみようという話。
f:id:kurimayoshida:20150318200152p:plain
ある人が視野角θで対象物を見ていて、それが高さhで見えているとする。
f:id:kurimayoshida:20150318200158p:plain
そこから人がxだけ前進すると対象物の見える範囲がh'になるとする。

hだけ見えていたのがh'しか見えなくなるのだから

拡大率 = h / h'

だ。

ある距離x進んだ時の拡大率が知りたいのだから
h'をxとhで表せれば良さそう。
f:id:kurimayoshida:20150318200205p:plain
図の赤い三角形に着目すると

赤い三角形右辺の長さ = (h - h')

であることが分かる。

同時に

赤い三角形右辺の長さ = x * tan(θ/2) * 2

でもあるので

(h - h') = x * tan(θ/2) * 2

式を変形すると

h' = h - x * tan(θ/2) * 2

よって

拡大率 = h / (h - x * tan(θ/2) * 2)

110%(=1.1)の拡大率になるxはというと

1.1 = h / (h - x * tan(θ/2) * 2)

1.1 * (h - x * tan(θ/2) * 2) = h

1.1 * h - 1.1 * x * tan(θ/2) * 2 = h

 -1.1 * x * tan(θ/2) * 2 = -0.1 * h

x = h / (22 * tan(θ/2))

ここで

θ = 45°

とすると

tan(θ/2) ≒ 0.4142135623730950488016887242097

x ≒ h * 0.10973698010786795676371312382771

例えばhが100の時は1.1倍になるxは約11。
で、約11ずつ進んでいくと拡大率はどうなるのかグラフにしてみる。

f:id:kurimayoshida:20150318200222p:plain

なんかそれっぽいけどどうなんだろ。

次は実際にアプリにして感じを見てみる。