Использование хэш-функции для придания объектам запоминающейся индивидуальности

StackOverflow https://stackoverflow.com/questions/1802094

  •  05-07-2019
  •  | 
  •  

Вопрос

(Примечание: проект на Python.)

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

Я думал о том, что для каждого объекта я создаю «личность». Несколько цветов и английское имя, и я добавлю это как представление объекта в GUI. Я полагал, что для создания этих цветов и имен будет использоваться хеш-функция, но я никогда не работал с хеш-функциями.

Как я могу делать то, что хочу?

Это было полезно?

Решение

используйте uuid (модуль uuid в python > = 2.5).

Этот uuid в версии 4 по определению является случайным во всех полях (кроме одного)

>>> uuid.uuid4()
UUID('9d477dc7-a986-4e3d-aa4f-6e57f690be78')

Вы можете правильно разложить поля, чтобы создать цвет или имя (сопоставив набор имен с конкретным полем). Конечно, вы ограничиваете свой хеш (настоящая личность - это всегда uuid), но для визуальных целей этого вполне достаточно. Например, вы можете использовать первые три октета для генерации цвета # 9d477d, а оставшийся октет c7 , чтобы выбрать одно имя из набора из 256.

Если у вас получаются слишком некрасивые цвета, вы можете вместо этого работать в режиме HSV и фиксировать насыщенность и значение на заданных уровнях. опять же, это еще больше ограничивает ваш хеш (но цветовое пространство уже довольно ограничено).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top