2020-10-13【Math】Pairing function 两个数字,获得新的唯一数字,及反转

把两个数字变成一个新的唯一数字,之前用过最笨的方法:
如 13 25
(int)(13.tostring() + 25.tostring())
这样也能获得唯一数字
但是如果多重拼接 ,可能会超过int的上限

于是便有了此方法
https://en.wikipedia.org/wiki/Pairing_function

  • 正转


  • 反转
    z为已知量,要求解x,y





    获得这个w值,

  • 测试
    13 25
    正转:(13+25)*(13+25+1)/2+25 = 766
    反转:w = 38.643965 = 38
    t = 741
    y = 25
    x = 38-25 = 13

其他做法:

    ///使用[seed]为[x,y]处的点生成一个伪随机的32位无符号整数。
    ///这可以用于将随机值与图块相关联,而不必存储它们。 
    /// Produces a psuedo-random 32-bit unsigned integer for the point at [x, y] using [seed].
    /// This can be used to associate random values with tiles without having to store them.
    public uint HashPoint(uint x, uint y, uint seed = 0)
    {
        return HashInt(HashInt(HashInt(seed) + x) + y) & 0xffffffff;
    }

    // From: https://stackoverflow.com/a/12996028/9457
    public uint HashInt(uint n)
    {
        n = (((n >> 16) ^ n) * 0x45d9f3b) & 0xffffffff;
        n = (((n >> 16) ^ n) * 0x45d9f3b) & 0xffffffff;
        n = (n >> 16) ^ n;
        return n;
    }


https://stackoverflow.com/questions/664014/what-integer-hash-function-are-good-that-accepts-an-integer-hash-key/12996028#12996028
https://github.com/skeeto/hash-prospector

你可能感兴趣的:(2020-10-13【Math】Pairing function 两个数字,获得新的唯一数字,及反转)