Случайное плавание с использованием координаты в качестве начального числа - PullRequest
0 голосов
/ 09 июля 2020

Функция Mathf.PerlinNoise(float x, float y) возвращает float, который я использую. Мне нужна более полностью случайная функция, которая может использовать координаты в качестве начального числа.

В моем идеале входные и выходные данные совпадают с вышеупомянутой функцией Mathf.PerlinNoise,. Дело в том, что его можно отключить с помощью функции Perlin Noise, чтобы возвращать полностью случайные числа с плавающей запятой, которые каждый раз возвращают одно и то же число с плавающей запятой для любой заданной координаты.

1 Ответ

1 голос
/ 09 июля 2020

Итак, ваш вопрос состоит из двух задач:

  1. Создайте начальное число из 2 float значений, которое всегда сопоставляет один и тот же ввод с одним и тем же начальным числом.

  2. Использование семени для генерации случайного float.

Для первой проблемы это можно решить, создав хэш-код, есть разные способы сделать это, но Я сошлюсь на этот ответ Джона Скита для получения дополнительной информации. Для вас хеширование будет выглядеть так:

public int GetHashCode(float x, float y)
{
    unchecked // Overflow is fine, just wrap
    {
        int hash = (int)2166136261;
        // Suitable nullity checks etc, of course :)
        hash = (hash * 16777619) ^ x.GetHashCode();
        hash = (hash * 16777619) ^ y.GetHashCode();
        return hash;
    }
}

Итак, теперь проблема 1 решена, мы можем перейти к проблеме 2, здесь у нас есть проблема, поскольку вам требуется float, которого нет в классе Random t поддержка. Если double вам достаточно (поплавки из PerlinNoise могут быть преобразованы в double), вы можете сделать это:

public double GenerateRandom(float x, float y)
{
    return new Random(GetHashCode(x, y)).NextDouble();
}

Если double не подходит достаточно, и вам нужно, чтобы это было float, я буду ссылаться на , этот ответ , все его решения должны работать с экземпляром Random, созданным с использованием функции ha sh в качестве семени.

Надеюсь, это поможет и удачи в вашем проекте!

...