Хэш-функция для генерации шума - PullRequest
1 голос
/ 01 декабря 2019

Я создаю генератор шума значения, и я обнаружил, что мой текущий хеш создает вид изображения на изображении:

enter image description here

Итак, яВ поисках лучшей хеш-функции, менее предсказуемой / повторяемой.

Я использую хеш вместо просто случайных чисел, потому что я хочу, чтобы он был детерминированным. Учитывая координаты (x, y), он всегда должен давать один и тот же результат.

Было бы неплохо, но не обязательно, если бы можно было масштабировать хеш-функцию, чтобы легко принимать больше параметров, например (x, y, z) или (x, y, z, t) вместо двух.

Мой текущий хэш:

public static class Hash
{
    public static float GetHash(int x)
    {
        x = x ^ 61 ^ (x >> 16);
        x += x << 3;
        x ^= x >> 4;
        x *= 0x27d4eb2d;
        x ^= x >> 15;
        return x / (float)int.MaxValue;
    }

    public static float GetHash(int x, int y) => GetHash((y << 8) + x);
}

Я добавил строку x / (float)int.MaxValue, потому что хочурезультат с плавающей точкой от 0 до 1.

Но я должен признать, что просто скопировал и вставил его откуда-то. Побитовые операции (и хэши) не моя сила.

...