2d Morton 码 64bits 解码功能

Posted

技术标签:

【中文标题】2d Morton 码 64bits 解码功能【英文标题】:2d Morton code 64bits decode function 【发布时间】:2015-08-13 11:14:11 【问题描述】:

第一个函数将 [x, y] 编码为 64 位宽的莫顿代码,其中 x 和 y 是使用二进制幻数交错位的 32 位宽整数。

什么是反向函数?

void xy2d_morton_64bits(uint64_t x, uint64_t y, uint64_t *d)


    x = (x | (x << 16)) & 0x0000FFFF0000FFFF;
    x = (x | (x << 8)) & 0x00FF00FF00FF00FF;
    x = (x | (x << 4)) & 0x0F0F0F0F0F0F0F0F;
    x = (x | (x << 2)) & 0x3333333333333333;
    x = (x | (x << 1)) & 0x5555555555555555;

    y = (y | (y << 16)) & 0x0000FFFF0000FFFF;
    y = (y | (y << 8)) & 0x00FF00FF00FF00FF;
    y = (y | (y << 4)) & 0x0F0F0F0F0F0F0F0F;
    y = (y | (y << 2)) & 0x3333333333333333;
    y = (y | (y << 1)) & 0x5555555555555555;

    *d = x | (y << 1);


void d2xy_morton_64bits(uint64_t d, uint64_t *x, uint64_t *y)

    ????

【问题讨论】:

【参考方案1】:

此问题已回答here。

d 拆分为偶数和奇数,然后使用一组类似的移位和掩码将位压缩在一起:

x = d&0x5555555555555555;
x = (x|x>>1)&0x3333333333333333;   //converts 0a0b0c0d.. -> 00ab00cd...
x = (x|x>>2)&0x0f0f0f0f0f0f0f0f;   //converts 00ab00cd.. -> 0000abcd...
//etc.

【讨论】:

以上是关于2d Morton 码 64bits 解码功能的主要内容,如果未能解决你的问题,请参考以下文章

2D Morton 解码功能 64bits

2D morton 代码编码/解码 64 位

Base64编解码是什么?

C语言应用——Base64编码/解码

C语言应用——Base64编码/解码

IRM3800 红外遥控器解码 linux驱动