Использование хэш-функции для придания объектам запоминающейся индивидуальности
(Примечание: проект на Python.)
Я запускаю симуляцию, в которой у меня есть много объектов, которые я хочу показать на экране и манипулировать ими. Должен быть способ идентифицировать каждый объект, потому что он будет внезапно перемещаться с места на место, и я хочу иметь возможность отслеживать, какой объект перемещен куда.
Я думал о том, что для каждого объекта я создаю "личность". Несколько цветов и английское имя, и я добавлю это в качестве представления объекта в GUI. Я полагал, что для создания этих цветов и имен будет использоваться хеш-функция, но я никогда не работал с хеш-функциями.
Как я могу делать то, что хочу?
1 ответ
Используйте uuid (модуль uuid в python >= 2.5).
Этот uuid в версии 4 по определению является случайным во всех полях (кроме одного)
>>> uuid.uuid4()
UUID('9d477dc7-a986-4e3d-aa4f-6e57f690be78')
Вы можете правильно разложить поля, чтобы создать цвет или имя (сопоставив набор имен с конкретным полем). Конечно, вы ограничиваете свой хеш (настоящая личность - это всегда uuid), но для визуальных целей этого вполне достаточно. Например, вы можете использовать первые три октета для генерации цвета #9d477d, а оставшийся октет c7
выбрать одно имя из набора 256.
Если вы получите слишком уродливые цвета, вы можете вместо этого работать в режиме HSV и фиксировать насыщенность и значение на заданных уровнях. опять же, это еще больше ограничивает ваш хэш (но цветовое пространство уже довольно ограничено).