2011-05-29 2 views
1

Je souhaite générer des points de façon aléatoire. Eh bien, il devrait y avoir une limitation sur l'axe des y. Plus tard, je relie les points à une ligne qui devrait procéder dans une animation simple. Vous pouvez l'imaginer comme une marche au hasard d'une personne ivre, montant et descendant.Générer des points aléatoires pour construire une ligne procédurale

enter image description here

Cela semble très simple. J'ai cherché sur le Web et j'ai constaté que cela pouvait être accompli en utilisant le markov chain. Je pense que cette idée est vraiment intéressante.

Vous pouvez créer le premier état de votre scène par vous-même et transmettre cet état en tant qu'entrée à l'algorithme de chaîne de markov. L'algorithme change aléatoirement cet état et crée une marche.

Cependant, je ne trouve aucun exemple de cet algorithme et aucun code source. Je viens de trouver une applet qui montre l'algorithme de la chaîne de Markov: http://www.probability.ca/jeff/java/unif.html

S'il vous plaît suggérer du code. Toutes les autres idées pour y parvenir sont également appréciées.

je peignais un exemple

enter image description here

Je veux la ligne de procéder de la même manière. Il y a des vallées, des pentes ... elles sont aléatoires mais l'aléatoire s'applique toujours à l'état initial de la ligne. Voilà pourquoi je trouve la chaîne makrov si intéressant ici: http://www.suite101.com/content/implementing-markov-chains-a24146

+1

S'il vous plaît indiquer vos besoins plus clairement: Si les distances x-axe aléatoire aussi? Si oui, combien aléatoire. Les plus petites pentes devraient-elles être plus probables ou devraient être à chaque fois autant de x que d'autres? – svick

+0

bien je veux générer une sorte de ligne infinie. Imaginez que vous faites défiler le long de l'axe des x vers la droite, la ligne se rapproche avec des phases ascendantes et descendantes aléatoires. Prenez la photo comme exemple. Si je prenais cela comme une entrée pour une chaîne de markov pour continuer la ligne, cela dessinerait la ligne de la même manière que l'entrée ... –

Répondre

4

Voici quelques code Lua:

absstepmax = 25 
ymin = -100 
ymax = 100 
x = 0 
y = 5 
for i = 1, 20 do 
    y = y + (math.random(2*absstepmax) - absstepmax - 1) 
    y = math.max(ymin, math.min(ymax, y)) 
    x = x + 5 
    print (x,y) 
end 

absstepmax limite la taille de l'étape ay par itération

ymin et ymax limite l'étendue des y

Il n'y a pas de biais dans l'exemple, c'est-à-dire que vous pouvez changer symétriquement vers le haut ou vers le bas. Si vous voulez que votre «ivre» tendant plus «en descente», vous pouvez changer le décalage après l'appel à aléatoire de absstepmax - 1 à absstepmax - 5 ou toute autre partialité que vous aimez.

Dans cet exemple, l'étape x est fixe. Vous pouvez aussi rendre cela aléatoire en utilisant les mêmes mécanismes.

Voici quelques exemples: pistes

> absstepmax = 25 
> ymin = -100 
> ymax = 100 
> x = 0 
> y = 5 
> for i = 1, 20 do 
>>  y = y + (math.random(2*absstepmax) - absstepmax - 1) 
>>  y = math.max(ymin, math.min(ymax, y)) 
>>  x = x + 5 
>>  print (x,y) 
>> end 
5 4 
10 22 
15 37 
20 39 
25 50 
30 40 
35 21 
40 22 
45 12 
50 16 
55 16 
60 12 
65 -1 
70 -8 
75 -14 
80 -17 
85 -19 
90 -25 
95 -37 
100 -59 
> absstepmax = 25 
> ymin = -100 
> ymax = 100 
> x = 0 
> y = 5 
> for i = 1, 20 do 
>>  y = y + (math.random(2*absstepmax) - absstepmax - 1) 
>>  y = math.max(ymin, math.min(ymax, y)) 
>>  x = x + 5 
>>  print (x,y) 
>> end 
5 -2 
10 -15 
15 -7 
20 1 
25 1 
30 12 
35 23 
40 45 
45 43 
50 65 
55 56 
60 54 
65 54 
70 62 
75 57 
80 62 
85 86 
90 68 
95 76 
100 68 
> 

résultat peint ajouté de OP:

enter image description here

Questions connexes