Pourcentage "non lineaire"

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Pourcentage "non lineaire"

Message par SPH »

Salut, :wink:

je poste ici un truc et astuce.
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 : Tout sélectionner

;;;;;;;;;;;


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))) )
Dernière modification par SPH le mer. 15/mai/2019 11:54, modifié 1 fois.
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Re: Pourcentage "non lineaire"

Message par SPH »

Alors que l'on obtient un pourcentage lineaire avec ce code :
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 : Tout sélectionner

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

Dernière modification par SPH le mer. 15/mai/2019 18:43, modifié 1 fois.
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Re: Pourcentage "non lineaire"

Message par SPH »

Avec 3 random :
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%)
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Pourcentage "non lineaire"

Message par Ar-S »

ça marche bien.
On a plus qu'à faire un jeu avec des lootbox payantes :mrgreen:
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Re: Pourcentage "non lineaire"

Message par SPH »

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)
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Pourcentage "non lineaire"

Message par Ollivier »

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 : Tout sélectionner

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.
Répondre