【发布时间】:2012-02-28 20:44:21
【问题描述】:
再次为这个糟糕的标题道歉 - 很难描述。
我使用了 Java 标记,因为这是我在这个项目中使用的语言,但这确实适用于任何语言。
为了清楚起见,我将使用一个简化的示例。
假设我正在显示一个可以“缩放”的图形,并且我可以访问代表比例的 0 到 1 之间的浮点数。
现在假设同一张图有不同的版本,越“特写”的版本显示的细节越精细,而距离越远的版本只显示重要的特征。
每个版本的大小都是下一个较大版本的一半。最特写相当于缩放级别 1。
可能有任意数量的版本,每个版本代表的视图是上一个的二分之一。
因此,当用户缩放图形时,我需要检查他们是否已达到最好显示不同版本的程度。如果他们还没有达到那个点,我只会显示上一个级别的缩小(缩小)版本。
例如,假设有 5 个不同的版本(尽管可能有任何数字),在一个数组中,从最小到最大(尽管如果更容易我可以颠倒这个),所以版本 [4] 是最大的并且版本[0] 是最小的。
例如,
- 放大 1 倍时,显示版本[4]
- 以 0.5 倍缩放,显示版本[3]
- 在 0.25 时,显示版本[2]
- 在 0.125 时,显示版本[1]
- 在 0.0625,显示版本[0]
由于没有可用于一半版本 [0] 的版本,我仍会显示版本 [0],但大小只有一半。如果添加了另一个版本,它将显示整体比例(缩放)为 0.03125 或更小的时间。
对于之间的比例,我应该显示下一个最大的图像,但尺寸会缩小。
例如,
- 缩放为 1 时,我会显示最大的(版本 [4]),未缩放。
- 在 0.8 的缩放比例下,仍然显示最大的但以 0.8 比例缩放
- 以 0.5 的缩放比例显示未缩放的版本 [3]
- 以 0.3 的缩放比例,以 0.6 的比例显示版本 [3]
- 以 0.2 的缩放比例,以 0.8 的比例显示版本 [2]
- 以 0.1 的缩放比例,以 0.8 的比例显示版本 [1]
我可能可以将它与条件句、链接和 Math.abs 等一起破解,但我敢打赌,有一种非常优雅、有效的方法可以用纯数学来处理这个问题——这简直让我难以想象。如果没有,任何关于使用干净、可预测的代码的方法的建议也将受到欢迎。
重申 - 目标是找到要显示的版本的版本(数组索引),以及它应该显示的相对比例,完全基于“全局”比例。
TYIA。
【问题讨论】: