c++ - 将 float 的最接近的整数次幂向下舍入

标签 c++ qt zooming

<分区>

给定两个浮点值 zoomAmountzoomFactor,我需要计算一个 newZoomAmount 这样:

(newZoomAmount <= zoomAmount) && (newZoomAmount == pow( zoomFactor, i ))

对于任何整数i。我可以轻松地循环遍历值或通过表进行二进制搜索来找到答案。然而:是否有一个封闭的形式来完成这个?


动机:zoomFactor 为 21.148698354997035,这样每 5 个“放大”事件结果正好是 2 的幂增加。当缩放图表以适应屏幕时,我希望缩放级别是这些凹口之一,以便缩小最终准确地落在“基本”1.0 缩放级别上。

最佳答案

表示:

A = zoomAmount
F = zoomFactor
newA = newZoomAmount

我们有:

newA = pow(F, i)
=> log(newA) = i*log(F)
=> i = log(newA)/log(F)

并且因为 newA <= A,并且 log 是非递减的,

i = floor(log(A)/log(F))

newZoomAmount = pow( zoomFactor, floor( log(zoomAmount)/log(zoomFactor) ) );

关于c++ - 将 float 的最接近的整数次幂向下舍入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17173305/

相关文章:

c++ - 在 C++ 中连接和返回数组

Qt 的独特模式

javascript - 从 qt 调用 javascript 函数返回空字符串

javascript - 如何在每个浏览器中检查缩放级别是否低于 100%(ctrl 和 - )?

c++ - 为什么 `int >> 32` 不总是零?

C++ 因式分解模板方法专门化模板类,这可能吗?

c++ - 如何以特定模式读取 C++ 中的一行并将其存储在字符串中?

c++ - 在 QML 中使用 std::string

c# - 使用 pictureBox sizeMode 裁剪位图克隆已缩放

android - 构建可缩放/可平移的容器