Samedi 24 mars 2007
Par Digital Guru
1 Introduction
Dans le monde des jeux video, l'aléatoire est necessaire pour faire des rendus qui soient réalistes et pas seulement le reflet d'un effet mathématiquement parfait ! Imaginez un moteur de particules sans un bon générateur pseudo-aléatoire ! C'est pourquoi il m'a semblé necessaire de faire un (court) papier sur la génération de nombres pseudo-aléatoires. Une variante à la morose classe Random, qui n'est pas capable de nous pondre 100 nombres différents !2 Définition de l'aléatoire
Un générateur de nombres pseudo-aléatoires est un algorithme qui génère une séquence de nombres présentant certaines propriétés du hasard. Par exemple, les nombres sont supposés être approximativement indépendants les uns des autres, et il est potentiellement difficile de repérer des groupes de nombres qui suivent une certaine règle (comportement de groupe). Cependant, les sorties d'un tel générateur ne sont pas entièrement aléatoires ; elles s'approchent seulement des propriétés idéales des sources complètement aléatoires. John von Neumann insista sur ce fait avec la remarque suivante : " Quiconque considère des méthodes arithmétiques pour produire des nombres aléatoires est, bien sûr, en train de commettre un péché. De vrais nombres aléatoires peuvent être produits avec du matériel qui tire parti de certaines propriétés physiques stochastiques (bruit d'une résistance par exemple). " La raison pour laquelle on se contente d'un rendu pseudo-aléatoire est : d'une part qu'il est difficile d'obtenir de " vrais " nombres aléatoires et que, dans certaines situations, il est possible d'utiliser des nombres pseudo-aléatoires, en lieu et place de vrais nombres aléatoires ; d'autre part, que ce sont des générateurs particulièrement adaptés à une implémentation informatique, donc plus facilement et plus efficacement utilisables.3 Un algorithme efficace et rapide !
Je vais vous présenter un algo capable de générer des nombres aléatoires très rapidement et de bonnes qualités (grande répartition et très longue période). A bât les générateurs congruentiels linéaires (pas mal hein ?), et vive les générateur additifs ! Je l'ai tiré de la suite de Fibonacci, la très célèbre !Voici la définition par récurrence de cette suite : un = (un-24 + un-55) mod M où M est la borne supérieur.
C'est à dire que 0 ³ un £ M
Pour u0, pourquoi ne pas prendre le nombre de ticks écoulé ? ou le nombre de secondes ? C'est aussi simple que ça, il n'y a pas grand chose à rajouter, à part que l'implémentation est ultra simple, l'efficacité démontrée, et d'une rapidité étonnante ! Cependant, dans vos jeux, je vous conseilles de générer un tableau de nombres aléatoires une fois pour toute, et de piocher dedans par la suite !
N'étant pas un pro du domaine, et estimant que vous n'avez pas besoin d'en savoir plus, je vais arrêter mon papier sur ces mots. Cependant, je ne peux que vous conseiller de visiter cette page, très bien faite, et aux mathématiques parfaites :
http://www.alrj.org/docs/algo/random.php
Bon coding à tous !
File translated from TEX by TTH, version 3.77.
On 24 Mar 2007, 22:48.
par DigitalGuru
publié dans :
[Coding] - Mini tuto
ajouter un commentaire commentaires (2) recommander
ajouter un commentaire commentaires (2) recommander




Commentaires