0

我正在尝试编写一个函数来计算沿 3 维希尔伯特曲线出现的点的距离。本质上是一个函数,它可以获取一个点的 x、y、z 坐标并计算它出现在曲线上的位置。假设 x、y 和 z 可以是整数 0 - 255,大致对应于 RGB 颜色空间。这样我就可以根据希尔伯特曲线创建一个有序的点列表。

我已经尝试在堆栈溢出上实现这里给出的代码,但是当我尝试用 C# 编写它时,这让我陷入了递归循环,而且这并不是我所追求的。我也尝试过实现此代码,但是,我必须误解它,因为它给了我似乎完全随机的结果。

目前,我正在关注本指南,并且已经完成了关于灰码的部分的编码。但是,当涉及旋转的示例计算时,我被卡住了。在表格中,我不确定最终数字是如何在 chnk、rotation 和 Flipbit 之间产生的。

我是一名计算机科学专业的学生,​​数学背景并不多。

下面是我到目前为止的代码示例

    //This might be a little more than graycode??
    public long GreyCode()
    {
        //convert the integers in the point to a binary representation of them
        string bx = Convert.ToString(Convert.ToInt32(x), 2).PadLeft(16, '0');
        string by = Convert.ToString(Convert.ToInt32(y), 2).PadLeft(16, '0');
        string bz = Convert.ToString(Convert.ToInt32(z), 2).PadLeft(16, '0');

        //store the binary values in an array to iterate over
        int[] bxArr = bx.Select(c => c - '0').ToArray();
        int[] byArr = by.Select(c => c - '0').ToArray();
        int[] bzArr = bz.Select(c => c - '0').ToArray();

        //call a function that will iterate over each one xoring every bit together
        //Xor's each bit by it's neighboring bit to the right 
        //until it reaches the end of the array
        bxArr = XorArray(bxArr);
        byArr = XorArray(byArr);
        bzArr = XorArray(bzArr);

        //This is a magic number and I don't understand it tbh
        int rank = 4;

        //Using rank, combine the arrays and flip every rankth bit
        int[] combined = (bxArr.Concat(byArr).ToArray()).Concat(bzArr).ToArray();
        int[] bitArr = FlipBits(rank, combined);

        //rotations and stuff

        //finally, convert to integer and store
        string resStr = string.Join("", bitArr);
        long ret = Convert.ToInt64(resStr, 2);

        return ret;
    }
4

0 回答 0