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

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

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

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

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

1 Ответ

2 голосов
/ 26 ноября 2009

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

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

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

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

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

...