Python — получить уникальное целое число из 2 чисел

#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())