2009-11-26 10 views
3

(Note:. Le projet est en Python)l'aide d'une fonction de hachage pour donner une personnalité mémorable aux objets

Je suis en cours d'exécution d'une simulation dans laquelle j'ai beaucoup d'objets que je veux montrer à l'écran et de manipuler avec. Il doit y avoir un moyen d'identifier chaque objet, car ils se déplaceront brusquement d'un endroit à l'autre et je veux être capable de suivre l'objet déplacé où. Ce que je pensais, c'est que pour chaque objet je vais générer une "personnalité". Un couple de couleurs, et un nom anglais, et je vais mettre cela comme la représentation de l'objet sur l'interface graphique. J'ai pensé qu'une fonction de hachage sera utilisée pour faire ces couleurs et ces noms, mais je n'ai jamais travaillé avec des fonctions de hachage.

Comment puis-je faire ce que je veux faire?

+1

Pas une réponse, mais peut-être utile: En Python, il existe une fonction 'id (...)' qui vous donne un identifiant unique pour un objet. – sth

Répondre

2

utilise un uuid (module uuid en python> = 2.5).

UUID, dans la version 4, est par définition aléatoire sur tous les domaines (sauf un)

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

Vous pouvez décomposer les champs correctement pour créer une couleur ou un nom (en traçant un seau de noms un champ spécifique). Bien sûr, vous limitez votre hash (la vraie identité est toujours l'uuid) mais à des fins visuelles c'est largement suffisant. Par exemple, vous pouvez utiliser les trois premiers octets pour générer la couleur # 9d477d et l'octet restant c7 choisir un nom d'un ensemble de 256.

Si vous vous retrouvez avec des couleurs trop laid, vous pouvez travailler dans HSV à la place, et pince la saturation et la valeur à des niveaux donnés. encore une fois, cela restreint encore plus votre hachage (mais l'espace de couleur est déjà assez limité après tout).

+0

Ça sonne bien. Maintenant, pour les noms, y a-t-il une liste prête de noms anglais que je pourrais utiliser? –

+1

http://www.world-english.org/boys_names_list.htm S'il vous plaît ne pas utiliser l'algorithme pour donner un nom à votre enfant;) –

+0

Il sera décevant de les rayer du site web ... là n'importe où une liste organisée? –