Salut !
un vrai casse-tête pour moi !
Tout est dans la question du post !
Discussion :
Salut !
un vrai casse-tête pour moi !
Tout est dans la question du post !
Pas très précis comme demande.
Quelle librairie utilisez vous ?
C'est quoi le rapport entre la valeur 800 et 100px ?
400, c'est 50px ou alors il c'est autre chose ?
800 ça représente quoi ?
Mes tutoriels
Avant de poster :
- F1
- FAQ
- Tutoriels
- Guide du développeur Delphi devant un problème
Salut !
Je suis sous pygame mais cela importe peu, ce qui m'interesse c'est le principe :
Comment représenter une valeur 800 avec une barre de 100 pixels, en gros c'est le principe qu'appliquent les graphes en barres verticales.
C'est de la programmation, quelque soit la librairie utilisée.
Si je connais le principe, je peux même le faire sans librairie graphique, juste avec des print d'astérisques en python.
Hello,
Le principe est une mise à l’échelle proportionnelle.
Il faut commencer par définir la valeur correspondant à la longueur maximale de la barre.
Par exemple :
Valeur maximale : 800 pixels
Longueur maximale : 100 pixels
La formule est :
longueur = valeur / valeur_maximale * longueur_maximaleDonc :
Avec une valeur de 400, on obtient 400 / 800 * 100 = 50 pixels.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 valeur = 800 valeur_maximale = 800 longueur_maximale = 100 longueur = valeur / valeur_maximale * longueur_maximale print(longueur) # 100
Il est préférable d’encadrer la valeur afin d’éviter qu’une valeur négative ou supérieure au maximum produise une barre incorrecte :
Quelques exemples :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 def convertir_en_pixels(valeur, valeur_maximale, longueur_maximale): valeur = max(0, min(valeur, valeur_maximale)) return round(valeur / valeur_maximale * longueur_maximale)
Avec des astérisques :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 print(convertir_en_pixels(800, 800, 100)) # 100 print(convertir_en_pixels(400, 800, 100)) # 50 print(convertir_en_pixels(200, 800, 100)) # 25
Dans le cas de Pygame, on peut dessiner une barre horizontale ainsi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 valeur = 400 longueur = convertir_en_pixels(valeur, 800, 100) print("*" * longueur)
Pour une barre verticale, le calcul est identique. Il faut seulement modifier la hauteur et déplacer le sommet du rectangle afin que la barre grandisse vers le haut :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 import pygame valeur = 400 valeur_maximale = 800 x = 50 y = 50 hauteur = 20 largeur_maximale = 100 largeur = convertir_en_pixels( valeur, valeur_maximale, largeur_maximale ) Fond représentant la longueur maximale pygame.draw.rect( ecran, "gray", (x, y, largeur_maximale, hauteur) ) Partie représentant la valeur actuelle pygame.draw.rect( ecran, "green", (x, y, largeur, hauteur) )
Le point essentiel n’est donc pas de représenter directement 800 avec 100 pixels, mais de définir une échelle dans laquelle 800 unités correspondent à 100 pixels.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 valeur = 400 valeur_maximale = 800 hauteur_maximale = 100 hauteur = convertir_en_pixels( valeur, valeur_maximale, hauteur_maximale ) x = 50 y_bas = 200 largeur = 20 pygame.draw.rect( ecran, "green", (x, y_bas - hauteur, largeur, hauteur) )
Toutes les autres valeurs sont ensuite calculées proportionnellement.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
non ta demande n'est pas claire. une barre de 100 pixels c'est une barre de 100 pixels.
Vu que tu es sur un jeu de tir, je suppose que c'est une barre de type points de vie.
Le principe de correspondance c'est un bête produit en croix
100 px => 800
1px ==> ? 800/100=8px
Sur un graphe/histogramme (ou comme sur une carte ou plein d'autres cas), c'est l'échelle qui détermine la longueur/valeur
X0 pixels = Y0 (valeur) (échelle)
donc une valeur Y1 aura une longueur de (Y1*X0)/Y0
Merci beaucoup pour vos réponses qui m'apprennent plein de choses !
Je vais y réfléchir calmement Merci beaucoup !!!
Dans les faits, il s'agit d'une barre qui représente un temps de rechargement d'une arme spéciale, et c'est un temps un peu long mais je veux le représenter avec une barre de 100 px voilà, maintenant je vois à peu près quoi faire grace à vos réponses mais faut que j'étudie ça![]()
Partager