如何编码/解码morton代码(z-order)给定[x,y]为32位无符号整数,产生64位morton代码,反之亦然?我确实有xy2d和d2xy,但仅适用于16位宽的坐标,产生32位莫顿数.在网上搜索了很多,但找不到.请帮忙.
第一个函数将[x,y]编码为64位宽的Morton代码,其中x和y是32位宽整数,使用Binary Magic Numbers的Interleave位.
反向功能是什么?
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 …Run Code Online (Sandbox Code Playgroud) 第一个函数将 [x, y] 编码为 64 位宽 Morton 代码,其中 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 …Run Code Online (Sandbox Code Playgroud)