【问题标题】:Calculate zoom level of tiles计算图块的缩放级别
【发布时间】:2013-09-10 17:45:52
【问题描述】:

我正在尝试根据缩放级别计算变量。

例如,我在缩放级别 1 有一个 4x4 网格的图块。现在我放大一次,在缩放级别 2 将变为 8 * 8。再次放大,在缩放级别 3 将是 16 * 16。等等.

现在我唯一存储的是缩放级别 1 中的两个数字,例如可以更改为 5x4 甚至 1x1。

所以我的问题是如何仅使用这两个数字和缩放级别来计算缩放级别 2 和 3 及以上的宽度和高度?

提前致谢。

【问题讨论】:

  • 您是否总是将每个缩放级别的边加倍?您需要更好地描述缩放级别 2 和 3 的外观。
  • 缩放级别 4 应变为 32 * 32,即缩放级别 1 为 4x4。如果缩放级别 1 为 5x4,它将变为 40 * 32。缩放级别 2、3、4 等应该以某种方式从缩放级别 1 计算出来。
  • 您是为特定语言编写的吗? C++、Java 等。在我看来,您只是将每个级别的每一面都加倍,因此 for 循环将起作用,但如果没有更多信息,很难给出准确的解决方案。
  • 我正在为 JavaScript 编写这个。但是由于大多数语言都有相同的数学运算符,因此如果在 C++ 中给出示例,转换应该不会太难。
  • 2 提升到放大倍数?

标签: math


【解决方案1】:

做同样事情的一种更巧妙的方法是使用位移,因为每个缩放级别总是乘以 2 的幂。

var x = this.data.Size.X;
var y = this.data.Size.Y;

x = x << (zoom-1);
y = y << (zoom-1);

【讨论】:

    【解决方案2】:

    感谢 jmstoker,我知道如何让它正常工作

    var x = this.data.Size.X;
    var y = this.data.Size.Y;
    for (var i = 1; i < zoom; i++) {
        x += x;
        y += y;
    }
    

    我只是获取每边的图块数量,然后查看不包括级别 1 的缩放级别数量,并将每个缩放级别的计数添加到自身。

    【讨论】:

      猜你喜欢
      • 2012-04-17
      • 1970-01-01
      • 2011-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-17
      相关资源
      最近更新 更多