【问题标题】:Converting grid coordinates转换网格坐标
【发布时间】:2019-01-13 20:13:35
【问题描述】:

所以我有一个网格,它是一种形式,我试图获取 X 和 Y。

是否有一个公式可以让我将例如 12 转换为 2,2 或 14 转换为 2,3

这种类型的网格也有名称吗?

 static int getX(int z)
        {
             int count = 0;
            int res = 0;
            int curr = 0;
            for(int temp = z; temp > 0; temp >>= 1)
            {
                    if(count % 2 ==0)
                    {
                       res += ((temp & 1) << curr);
                        curr++;
                    }
                      count++;                
            }   

            return res;
        }


        static int getY(int z)
        {
             int count = 0;
            int res = 0;
            int curr = 0;
            for(int temp = z; temp > 0; temp >>= 1)
            {
                    if(count % 2 ==1)
                    {
                       res += ((temp & 1) << curr);
                        curr++;
                    }
                      count++;                
            }   

            return res;
        }

【问题讨论】:

  • 如果找不到模式,可以使用字典/关联数组将每个输入数字(例如 12)映射到输出坐标(例如 (2,2)) .
  • 这看起来像一条“Z 阶曲线”。
  • @Sneftel 看起来是这样 :) 我会用谷歌搜索一下。

标签: math


【解决方案1】:

正如 Sneftel 观察到的,这看起来像 Z-order curve。因此,您可以通过交错二进制表示来转换坐标。所以你的例子是

 0 1 0  x=2       0 1 0  x=2
0 1 0   y=2      0 1 1   y=3
001100  p=12     001110  p=14

所以要从单元格编号 p 中获取 xy 坐标,您需要分配 p 的位xy。这种位算术很难用基本算术运算来表达,而且据我所知没有公认的公式符号,但这个想法很简单。

【讨论】:

  • 感谢 MvG。我添加了一些代码。有什么可以优化的方法吗?
  • @John:网络可能会为您提供答案。可能对中等位大小的块使用预计算,或者可能使用最新的处理器硬件指令。
猜你喜欢
  • 1970-01-01
  • 2015-07-17
  • 2013-09-22
  • 1970-01-01
  • 2023-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-18
相关资源
最近更新 更多