Итак, ваш вопрос состоит из двух задач:
Создайте начальное число из 2 float
значений, которое всегда сопоставляет один и тот же ввод с одним и тем же начальным числом.
Использование семени для генерации случайного 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 в качестве семени.
Надеюсь, это поможет и удачи в вашем проекте!