0
第一個函數將[x,y]編碼爲64位寬Morton代碼,其中x和y是32位寬整數,使用交錯位由二進制幻數組成。2D Morton解碼函數64位
什麼是相反的功能?
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 on pointer)。另外,爲什麼不直接返回結果?什麼是「功能」? – Olaf
此前提出問題http://stackoverflow.com/questions/4909263/how-to-efficiently-de-interleave-bits-inverse-morton的 –
可能重複的[2D莫頓碼編碼/解碼64bits的](HTTP://計算器的.com /問題/ 30539347/2D-莫頓 - 編碼 - 編碼 - 解碼-64位)。 @WeatherVane:在最後幾天他問了同樣的問題。 – Olaf