【发布时间】:2015-08-12 23:05:39
【问题描述】:
第一个函数将 [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)
{
// ????
}
【问题讨论】:
-
第一个函数不起作用。您显然混淆了指针和值。您的编译器至少应该明确警告(指针上的 int-ops)。另外,为什么不直接返回结果呢?
function是什么? -
2D morton code encode/decode 64bits 的可能副本。 @WeatherVane:他在过去几天内三次问过同样的问题。
-
:) 奥拉夫——你当然是对的。对不起。匆忙将javascript代码与c混合时犯了错误。事实上,它甚至不是我的代码,而是从我之前的帖子中借来的。已经编辑好了。但是这个问题仍然没有答案......
-
没错,我问的是同样的问题,或者至少是同样的问题,因为找不到答案。请帮忙。
标签: c z-order-curve