PureBasic
https://www.purebasic.fr/french/

Pourcentage "non lineaire"
https://www.purebasic.fr/french/viewtopic.php?f=6&t=17683
Page 1 sur 1

Auteur:  SPH [ Mer 15/Mai/2019 11:49 ]
Sujet du message:  Pourcentage "non lineaire"

Salut, :wink:

je poste ici un truc et astuce.

Citation:
Distribution de 20000 nombres :

Nombre 0 : 5582 (28%)
Nombre 1 : 3649 (18%)
Nombre 2 : 2776 (14%)
Nombre 3 : 2153 (11%)
Nombre 4 : 1639 (8%)
Nombre 5 : 1378 (7%)
Nombre 6 : 955 (5%)
Nombre 7 : 785 (4%)
Nombre 8 : 559 (3%)
Nombre 9 : 364 (2%)
Nombre 10 : 160 (1%)


Code:
;;;;;;;;;;;


cmb=20000
absis=10

;;;;;;;;;;;

Dim nb(absis)

For i=1 To cmb
  a=(Random(Random(absis)))
  nb(a)+1
Next

;;;;;;;;;;;

Dim pourcentage.f(absis)

Debug "Distribution de "+Str(cmb)+" nombres :"
Debug ""

For i=0 To absis
  pourcentage(i)=(nb(i)*100)/cmb
  Debug "Nombre "+Str(i)+" : "+Str(nb(i))+" ("+StrF(pourcentage(i))+"%)"
Next

;;;;;;;;;;;;;;;;;;;;;;;


Ca sert a quoi me direz vous ?
Imaginez que vous faisiez un jeu où il faut tuer des monstres qui droppent des items. Parmi ces items, un item tres rare. Et bien, il correspondrait au chiffre 10 qui sort a 1% du temps (grace a la ligne : (Random(Random(absis))) )

Auteur:  SPH [ Mer 15/Mai/2019 11:51 ]
Sujet du message:  Re: Pourcentage "non lineaire"

Alors que l'on obtient un pourcentage lineaire avec ce code :

Citation:
Distribution de 20000 nombres :

Nombre 0 : 1846 (9.2299995422%)
Nombre 1 : 1838 (9.1899995804%)
Nombre 2 : 1874 (9.3699998856%)
Nombre 3 : 1830 (9.1499996185%)
Nombre 4 : 1770 (8.8500003815%)
Nombre 5 : 1756 (8.779999733%)
Nombre 6 : 1847 (9.2349996567%)
Nombre 7 : 1833 (9.1649999619%)
Nombre 8 : 1842 (9.2100000381%)
Nombre 9 : 1812 (9.0600004196%)
Nombre 10 : 1752 (8.7600002289%)



Code:
cmb=20000
absis=10

;;;;;;;;;;;

Dim nb(absis)

For i=1 To cmb
  a=(Random(absis)) ;;;;;;;;;;;;;;;; 1 seul random
  nb(a)+1
Next

;;;;;;;;;;;

Dim pourcentage.f(absis)

Debug "Distribution de "+Str(cmb)+" nombres :"
Debug ""

For i=0 To absis
  pourcentage(i)=(nb(i)*100)/cmb
  Debug "Nombre "+Str(i)+" : "+Str(nb(i))+" ("+StrF(pourcentage(i))+"%)"
Next


Auteur:  SPH [ Mer 15/Mai/2019 12:41 ]
Sujet du message:  Re: Pourcentage "non lineaire"

Avec 3 random :
Citation:
Distribution de 20000 nombres :

Nombre 0 : 9759 (48.7949981689%)
Nombre 1 : 4246 (21.2299995422%)
Nombre 2 : 2346 (11.7299995422%)
Nombre 3 : 1459 (7.2950000763%)
Nombre 4 : 865 (4.3249998093%)
Nombre 5 : 567 (2.8350000381%)
Nombre 6 : 377 (1.8849999905%)
Nombre 7 : 218 (1.0900000334%)
Nombre 8 : 103 (0.5149999857%)
Nombre 9 : 48 (0.2399999946%)
Nombre 10 : 12 (0.0599999987%)

Auteur:  Ar-S [ Mer 15/Mai/2019 14:39 ]
Sujet du message:  Re: Pourcentage "non lineaire"

ça marche bien.
On a plus qu'à faire un jeu avec des lootbox payantes :mrgreen:

Auteur:  SPH [ Mer 15/Mai/2019 15:10 ]
Sujet du message:  Re: Pourcentage "non lineaire"

Figure toi que j'ai utilisé cette technique pour mon jeu de scrabble (pour faire la "rareté" des pieces d'argent, d'or et de diamant) 8)

Auteur:  Ollivier [ Mer 15/Mai/2019 18:43 ]
Sujet du message:  Re: Pourcentage "non lineaire"

Je ne connaissais pas cette méthode. C'est bien de voir les stats qui vont avec.
Je serais plus resté sur celle-ci :
Code:
Define Max.I ; racine du maximum (ou écart-type ? ou précision ?)
Define Scale.D ; échelle
X.D = Pow(Random(Max), 2.0) * Scale

Ce n'est pas forcément mieux. Merci pour l'astuce.

Page 1 sur 1 Heures au format UTC + 1 heure
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/