#python #math
#python #математика
Вопрос:
Я создаю игру (вселенную с «бесконечным» количеством звезд) с процедурной генерацией, и я столкнулся с небольшой проблемой получения уникального числа из координат для начального числа. Мир разделен на 16×16 секторов, и каждый сектор имеет координаты X и Y. Я использую модуль python random
для генерации некоторых значений по начальным данным (является ли сектор звездой, если да, есть ли у него планеты и тому подобное).
Также x и y могут быть отрицательными числами.
Вот что я пробовал:
random.seed(hash(str((x << 32) y)))
#works but very slow
random.seed((x amp; 0xFFFF) << 16 | (y amp; 0xFFFF))
#also works but if coordinate is bigger than 16 numbers, it just teleports to the center
random.seed(x*y)
#doesn't work, because coordinates can be x10,y15 and x15,y10, so the number is not unique
random.seed(x * (y << 16))
#the world gets mirrored by half
Комментарии:
1. Вам нужно одно начальное число из двух координат? Как насчет
16*X Y
(для координат на основе нуля).2. Моя идея была бы похожа на вашу первую:
random.seed(hash((x, y)))
3. Вы можете добавить соответствующие значения к x и y, чтобы сделать их неотрицательными и неотрицательными.
4. Какова область X и Y ? Значение, какие значения они могут иметь? Также почему
hash(str())
с 1-й попытки?5. Я понял, вы уже упоминали об этом. Я спрашиваю о минимальных и максимальных значениях
Ответ №1:
Используйте комплексное начальное число (x = действительное, y = мнимое).
import random as r
x=5.5
y=6.6
sd = x 1j*y
r.seed(sd)
print(r.random())