Archives par mot-clé : aléatoire

Aléatoire, bruit Brownien, bruit Perlin et bruit Gaussien

La notion d’aléatoire ou de hasard à une grande place dans le domaine du design generatif et de l’experience interactive. Nous avons régulièrement besoins dans de nombreux cas de générer une ou des valeurs aléatoires. Par exemple, si nous désirons recréer le déplacement chaotique d’un insecte volant, il peut être très pratique de définir sa vitesse ou son déplacement de manière aléatoire. Nous ne serons pas dans une reproduction parfaite de la nature mais nous aurons créé un objet qui aura ses propres propriétés qui ont pour particularité d’être aléatoire.

Si nous pouvons utiliser divers type d’aléatoire dans Processing (brownien, gaussien ou perlin) nous ne verrons ici que les deux principaux types d’aléatoire à savoir le bruit brownien et le bruit perlin.

Lorsque nous souhaitons obtenir une valeur aléatoire en code, il nous faut toujours définir une valeur minimum et un valeur maximum. Imaginons ici que nous souhaitons obtenir une valeur aléatoire comprise entre 0 et 100

Le bruit brownien

Le bruit brownien est un aléatoire où les valeurs produites sont réparties de manière totalement aléatoire. Chaque valeur pourra être grandement espacée les une des autres ou totalement proche voir identique. Une répartition brownien peut être imaginé par ce schema :

01_01_aleatoire

Dans processing le bruit brownien est produit par la fonction :

Il nous suffira de définir les valeurs entre parenthèses pour attribuer une valeur minimum ou maximum. Dans notre cas nous voulions obtenir une valeur comprise entre 0 et 100.
Cela nous donne donc :

Appliquons cela dans processing en créant un skecth de 500*500 où nous dessinerons une ellipse de 10*10 à une position aléatoire définie par un random.
Cela nous donne donc :

ixd_random_00

La position de notre ellipse est donc aléatoire et celle-ci semble se déplacer comme un objet se téléportant d’un point à un autre.

Le bruit Perlin

Le bruit perlin est bien différent du bruit brownien tant dans sa syntaxe que dans les valeurs qu’il renvoie. Contrairement au bruit brownien le bruit perlin produit une séquence de valeur où chaque valeur est proche de la valeur précédente. On obtient donc un répartition harmonieuse de valeur. La structure de bruit réel est similaire à celle d’un signal audio, en ce qui concerne l’utilisation de la fonction de fréquences. Similaire à la notion d’harmoniques en physique, bruit de Perlin est calculée sur plusieurs octaves qui sont additionnés pour le résultat final.

On peut illustrer le bruit perlin par ce schema

01_02_aleatoire

Ce bruit est très utilisé dans la génération de texture procédural mais aussi dans les déplacement de particule puisqu’il nous permet d’avoir une harmonie entre les valeurs et donc des sensations d’incrémentation et décrémentation plus douces.

Dans sa syntaxe le bruit perlin est bien différent du bruit brownien.
voici comment il se déclare :

On remarque de prime abord que là où le bruit brownien accueille deux valeurs entre ses parenthèses (minimum et maximum) le bruit perlin peut en accueillir trois. En effet on dis du bruit perlin qu’il peut être uni, bi ou tridimensionnel. Nous nous attarderons sur le bruit perlin uni-dimensionnel dans cette partie.

La seconde remarque que nous ferons sur le bruit perlin est qu’il ne nous renverra toujours qu’une seule valeur comprise entre 0 et 1 et celle-ci sera toujours identique. En effet la répartition de bruit perlin est définie par la valeur précédente obtenue. Il faudra donc incrémenter notre valeurs puis recalculer notre noise afin d’obtenir une suite de valeurs répartie de façon harmonieuse.
Pour cela nous allons utiliser un valeur que nous appellerons xInc et qui sera égale à 0. Nous calculerons un noise à partir de cette valeur puis à la fin de chaque boucle nous l’incrémenterons de 0.01 pour calculer un nouveau noise à partir de la valeur précédente.

Nous obtenons donc une suite de valeurs harmonieuses dépendante de la valeur précédente. Cependant nos valeurs restent comprise entre 0 et 1. Pour obtenir nos valeurs entre 0 et 100 il faudra donc effectuer une règle de trois (ou règle de proportionnalité, voir ici) qui nous renverra nos valeurs sur une échelle de 1 à 100.

Pour cela processing nous offre une fonction toute faite : map(). Cette fonction va nous permettre de mapper nos valeurs comprises entre 0 et 1 entre 0 et 100 de la manière suivante :

Voyons donc comment obtenir nos valeurs en aléatoire perlin compris entre 0 et 100 :

Nous voila donc avec nos valeurs comprises entre 0 et 100 et réparties de façon harmonieuse. Appliquons maintenant cette méthode à notre sketch de 500*500 où nous dessinerons une ellipse de 10*10 à une position aléatoire définie par un noise.

ixd_random_01

Nous obtenons alors une ellipse dont la position est définie de manière aléatoire en fonction de la position précédente. Cela à pour effet de donner l’impression que notre ellipse se déplace de manière aléatoire comme un insecte par exemple.

Le bruit gaussien

 

Le bruit gaussien, contrairement au brownien et au perlin, se base sur un répartition moyenne des valeurs en fonction de la courbe de Gauss, c’est à dire que la probabilité d’observer une valeur aléatoire s’écartant de la valeur moyenne décroît rapidement en fonction de la valeur de deviation.

On peut illustrer le bruit gaussien par ce schema

gaussian

Afin de définir une valeur aléatoire gaussien dans processing nous avons besoins de définir 3 valeurs :

  1. La valeur gaussienne définie par la méthode
  2. La valeur médiane qui définie la valeur moyenne que nous souhaitons obtenir.
  3. La valeur de déviation qui définie la distance maximum qui sépare la valeur médiane de la valeur des extrêmes (min/max)

Ainsi pour définir une valeur gaussienne comprise la médiane est 50 et dont la déviation (min/max) est 25 nous aurons

L’exemple suivant montre comment dessiner une ellipse dont la position est définie par une distribution gaussienne.

gaussian