IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Comment dessiner un rectangle de longueur 100 px qui est censé représenter la valeur de 800 ?


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2023
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2023
    Messages : 316
    Par défaut Comment dessiner un rectangle de longueur 100 px qui est censé représenter la valeur de 800 ?
    Salut !

    un vrai casse-tête pour moi !
    Tout est dans la question du post !

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    3 182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 182
    Par défaut
    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 ?

  3. #3
    Membre confirmé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2023
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2023
    Messages : 316
    Par défaut
    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.

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 962
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 962
    Par défaut
    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 :

    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
    Avec une valeur de 400, on obtient 400 / 800 * 100 = 50 pixels.

    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 :

    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)
    Quelques exemples :

    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
    Avec des astérisques :

    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)
    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
    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)
    )
    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
     
    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)
    )
    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.

    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)

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 771
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 771
    Par défaut
    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

  6. #6
    Membre confirmé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2023
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2023
    Messages : 316
    Par défaut
    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

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 107
    Par défaut
    Citation Envoyé par nouby Voir le message
    il s'agit d'une barre qui représente un temps de rechargement d'une arme spéciale
    Du coup d'où ça sort 800 ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#][Direct3D] Comment dessiner un rectangle
    Par FraktaL dans le forum DirectX
    Réponses: 3
    Dernier message: 26/10/2005, 00h29
  2. Réponses: 14
    Dernier message: 13/10/2005, 15h00
  3. Dessiner un rectangle sur une forme
    Par Neo41 dans le forum MFC
    Réponses: 6
    Dernier message: 13/08/2005, 01h08
  4. [VB.NET] Dessiner plusieurs rectangles.
    Par Emcy dans le forum Windows Forms
    Réponses: 9
    Dernier message: 23/03/2005, 16h57
  5. Dessiner un rectangle avec bords et texte ...
    Par Djedjeridoo dans le forum Composants VCL
    Réponses: 3
    Dernier message: 16/06/2003, 17h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo