基本上,對數。我會忽略這個事實,log
的底層實現可能會迭代,因爲你可能不介意。
使用下列內容:
zoomFactor = 21/5
= 1.148698354997035
zoomAmount = 2.25
你需要找到以下的(請注意,我用的比,而不是小於或等於少,看到底爲什麼):
(newZoomAmount < 2.25) && (newZoomAmount == 2i/5)
通過檢查我們知道(因爲zoomFactor5 == 2
和zoomFactor6 == 2.297... > 2.25
)
newZoomAmount == 2
i == 5
因此,爲了得到當前zoomAmount
在指數方面,我們採取:
zoomExponent = log(zoomAmount)/log(zoomFactor)
= 0.81093.../0.13862...
= 5.84962...
爲了得到一個最低的整數,你應該減1,然後採取了天花板。
newZoomExponent = ⌈zoomExponent - 1⌉
= ⌈4.84962...⌉
= 5
最後:
newZoomAmount = zoomFactornewZoomExponent
我們使用的減量而不是隻是樓層的天花板上的原因是爲了處理特殊情況下zoomAmount
是zoomFactor
一個完美的電源,在這種情況下
⌊zoomExponent⌋ == zoomExponent
newZoomAmount == zoomAmount
我們明顯不想要的。
來源
2013-06-18 16:19:43
Wug
標籤爲Qt,因爲這是用來縮放'QGraphicsView',因此我可以使用任何Qt方法,這可以讓它更容易實現。 – Phrogz