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 :

Créer des objets avec matplotlib


Sujet :

Python

  1. #1
    Membre habitué Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 495
    Points : 152
    Points
    152
    Par défaut Créer des objets avec matplotlib
    bonjour je cherche a créer des objets


    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    # coding: utf-8 
    '''
    Created on 17 juin 2023
    '''
     
    import matplotlib.pyplot as plt
    import matplotlib.animation as animation
    from mpl_toolkits.mplot3d.art3d import Poly3DCollection
    import numpy as np
    from PIL import Image
    D avec 
    # Coordonnées des sommets du dé à dix faces
    vertices = [
        [0, 0, 0],
        [1, 0, 0],
        [1, 1, 0],
        [0, 1, 0],
        [0, 0, 1],
        [1, 0, 1],
        [1, 1, 1],
        [0, 1, 1],
        [0.5, 0.5, 1.5],
        [0.5, 0.5, -0.5]
    ]
     
    # Faces du dé à dix faces (indices des sommets)
    faces = [
        [0, 1, 2, 3],   # Face 1
        [0, 1, 5, 4],   # Face 2
        [1, 2, 6, 5],   # Face 3
        [2, 3, 7, 6],   # Face 4
        [3, 0, 4, 7],   # Face 5
        [4, 5, 9, 8],   # Face 6
        [5, 6, 9, 8],   # Face 7 (modifié)
        [6, 7, 9, 8],   # Face 8 (modifié)
        [7, 4, 9, 8],   # Face 9 (modifié)
        [9, 6, 5, 8]    # Face 10 (modifié)
    ]
     
    # Chargement des images des chiffres pour le dé à dix faces
    images = []
    for i in range(1, 11):
        image_path = f"chiffre_{i}.png"  # Chemin vers l'image du chiffre
        image = Image.open(image_path)
        images.append(image)
     
    fig = plt.figure()
    ax = fig.add_subplot(111, projection='3d')
     
    # Création des polygones pour chaque face du dé avec les textures des chiffres
    polygons = []
    rotated_vertices = [np.array(vertex) for vertex in vertices]  # Déplacement de la définition de rotated_vertices
     
    for i, face in enumerate(faces):
        polygon = Poly3DCollection([rotated_vertices[j] for j in face], alpha=1.0)
        polygon.set_facecolor('white')
        polygon.set_edgecolor('black')
        polygon.set_alpha(0.8)
        ax.add_collection3d(polygon)
     
        # Placement de l'image du chiffre sur la face
        face_center = np.mean([rotated_vertices[j] for j in face], axis=0)
        image = images[i]
        ax.imshow(image, extent=(face_center[0]-0.5, face_center[0]+0.5, face_center[1]-0.5, face_center[1]+0.5), origin='lower')
     
     
    # Paramètres d'affichage
    ax.set_xlabel('X')
    ax.set_ylabel('Y')
    ax.set_zlabel('Z')
    ax.set_xlim([0, 1])
    ax.set_ylim([0, 1])
    ax.set_zlim([0, 1.5])
     
     
    # Fonction d'animation pour faire tourner le dé à dix faces
    def animate(frame):
        ax.cla()  # Effacer le contenu de l'axe à chaque frame
     
        # Rotation aléatoire du dé
        angle = np.random.uniform(0, 360)  # Angle de rotation aléatoire
        rotation_matrix = np.array([[np.cos(np.radians(angle)), -np.sin(np.radians(angle)), 0],
                                   [np.sin(np.radians(angle)), np.cos(np.radians(angle)), 0],
                                   [0, 0, 1]])
        rotated_vertices = [np.dot(rotation_matrix, vertex) for vertex in vertices]
     
        # Recréation des polygones pour chaque face avec les textures des chiffres
        polygons = []
        for i, face in enumerate(faces):
            polygon = Poly3DCollection([rotated_vertices[j] for j in face], alpha=1.0)
            polygon.set_facecolor('white')
            polygon.set_edgecolor('black')
            polygon.set_alpha(0.8)
            ax.add_collection3d(polygon)
     
            # Placement de l'image du chiffre sur la face
            face_center = np.mean([rotated_vertices[j] for j in face], axis=0)
            image = images[i]
            ax.imshow(image, extent=(face_center[0]-0.5, face_center[0]+0.5, face_center[1]-0.5, face_center[1]+0.5), origin='lower')
     
        # Paramètres d'affichage
        ax.set_xlabel('X')
        ax.set_ylabel('Y')
        ax.set_zlabel('Z')
        ax.set_xlim([0, 1])
        ax.set_ylim([0, 1])
        ax.set_zlim([0, 1.5])
     
    ani = animation.FuncAnimation(fig, animate, frames=100, interval=200)
    plt.show()
    voici l'erreur que j'obtiens Avez vous une idée ?

    File "D:\eclipse-workspace\Images3d\MATPLOTLIB\De4face10.py", line 55, in <module>
    polygon = Poly3DCollection([rotated_vertices[j] for j in face], alpha=1.0)
    File "art3d.py", line 887, in __init__
    raise ValueError('verts must be a list of (N, 3) array-like')
    ValueError: verts must be a list of (N, 3) array-like

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 426
    Points : 37 008
    Points
    37 008
    Par défaut
    Citation Envoyé par dedalios Voir le message
    voici l'erreur que j'obtiens Avez vous une idee ?
    Poly3DCollection attend des points avec 3 coordonnées (3D) d'où le (N, 3).
    Pourquoi ne pas fabriquer ce que la fonction attend?
    note: au delà, il faut essayer de comprendre ce que vous cherchez à faire... et probablement ré-écrire tout ou partie du code. Même si j'avais du temps, je ne vole pas le boulot des autres (ici vous).

    - W

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 735
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 735
    Points : 31 060
    Points
    31 060
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par dedalios Voir le message
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    images = []
    for i in range(1, 11):
    	image_path = f"chiffre_{i}.png"  # Chemin vers l'image du chiffre
    	image = Image.open(image_path)
    	images.append(image)
    images=tuple(Image.open("chiffre_{0}.png".format(i) for i in range(1, 11)))

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 426
    Points : 37 008
    Points
    37 008
    Par défaut
    On préfère les f-strings et on évite les double quotes:

    images=tuple(Image.open(f'chiffre_{0}.png' for i in range(1, 11)))

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 735
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 735
    Points : 31 060
    Points
    31 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    On préfère les f-strings
    Question de point de vue non? Le format a aussi ses avantages
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >>> def carre(n):
    ...     print("trace: ", n)
    ...     return n**2
    ... 
    >>> print(f"test: {carre(5)}={carre(5)}")
    trace:  5
    trace:  5
    test: 25=25
    >>> print("test: {0}={0}".format(carre(5)))
    trace:  5
    test: 25=25
    >>>
    https://levelup.gitconnected.com/whe...d-3b89718757bd

    Citation Envoyé par wiztricks Voir le message
    et on évite les double quotes
    Un peu pareil... print("aujourd'hui il a fait bien chaud!!!")... surtout qu'à ce qu'il semble, la pep8 ne dit rien à ce sujet...
    PEP doesn’t make a recommendation on whether to use single or double quotes - pick a rule and stick to it.
    => https://betterdatascience.com/python...s-double-quote

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 426
    Points : 37 008
    Points
    37 008
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Question de point de vue non?
    Absolument, mais c'est ce qu'on peut aussi dire sur l'utilisation de tuples et generateurs: si on a envie d'écrire une boucle et plein de lignes, c'est un choix, pas un sujet.
    - W

  7. #7
    Membre habitué Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 495
    Points : 152
    Points
    152
    Par défaut
    bonjour

    Je recherche des solutions pour simulé un dé qui tourne.
    Je teste plusieurs solutions sans parvenir a ce que je souhaite.

    Passe de ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    images = []
    for i in range(1, 11):
        image_path = f"chiffre_{i}.png"  # Chemin vers l'image du chiffre
        image = Image.open(image_path)
        images.append(image)
    a cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    images=tuple(Image.open("chiffre_{0}.png".format(i) for i in range(1, 11)))
    Ne faudrait il pas mettre ceci car sans variation de la variable i le nom du fichier est toujours le même .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    images=tuple(Image.open(f"chiffre_{i}.png".format(i) for i in range(1, 11)))

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 426
    Points : 37 008
    Points
    37 008
    Par défaut
    Citation Envoyé par dedalios Voir le message
    Ne faudrait il pas mettre ceci car sans variation de la variable i le nom du fichier est toujours le même
    Est-ce que c'est ce que vous avez constaté après avoir testé?

    - W

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 735
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 735
    Points : 31 060
    Points
    31 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dedalios Voir le message
    Je recherche des solutions pour simulé un dé qui tourne.
    Je ne suis pas certain que matplotlib soit la librairie la plus adéquate pour ça.

    Citation Envoyé par dedalios Voir le message
    Ne faudrait il pas mettre ceci car sans variation de la variable i le nom du fichier est toujours le même .
    Le {0} ne signifie pas "variable" mais "position de la valeur à afficher via format()". Donc "i" varie et on l'affiche à chaque fois en première position.
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> tuple("chiffre_{0}.png".format(i) for i in range(1, 11))
    ('chiffre_1.png', 'chiffre_2.png', 'chiffre_3.png', 'chiffre_4.png', 'chiffre_5.png', 'chiffre_6.png', 'chiffre_7.png', 'chiffre_8.png', 'chiffre_9.png', 'chiffre_10.png')


    Citation Envoyé par dedalios Voir le message
    images=tuple(Image.open(f"chiffre_{i}.png".format(i) for i in range(1, 11)))
    Si tu passes par les f-strings, dans ce cas, format ne sert plus (et je ne sais pas comment réagit Python si on mélange les deux écritures)
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> tuple(f"chiffre_{i}.png" for i in range(1, 11))
    ('chiffre_1.png', 'chiffre_2.png', 'chiffre_3.png', 'chiffre_4.png', 'chiffre_5.png', 'chiffre_6.png', 'chiffre_7.png', 'chiffre_8.png', 'chiffre_9.png', 'chiffre_10.png')
    Après oui, si tu es plus à l'aise avec les f-strings c'est toi qui voit. Personnellement je ne les aime pas mais chacun est libre.

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 426
    Points : 37 008
    Points
    37 008
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Si tu passes par les f-strings, dans ce cas, format ne sert plus (et je ne sais pas comment réagit Python si on mélange les deux écritures)
    Un f-string c'est pareil que .format mais limité aux mots-clefs (f'{i}' <=> '{i}'.format(i=i))
    Si on "mélange" les deux, on applique 2 fois format et il va falloir des doubles accolades pour savoir quoi remplacer en premier.

    - W

  11. #11
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 226
    Points : 4 710
    Points
    4 710
    Par défaut
    bonjour
    Citation Envoyé par Sve@r Voir le message
    images=tuple(Image.open("chiffre_{0}.png".format(i) for i in range(1, 11)))
    format ou f-string , ... c'est exactement la même chose au niveau de l'interpréteur (bien que je préfère f-string)

    MAIS, ici c'est surtout que ce code n'a pas de sens fermeture pour open() décalée ? car open() ne prend pas une liste en paramètre
    Tu désirais écrire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    images_handle = tuple(Image.open(f"chiffre_{i}.png") for i in range(1, 11))
    Citation Envoyé par Sve@r;
    tuple("chiffre_{0}.png".format(i) for i in range(1, 11))
    ok, ici nous sommes d'accord

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 426
    Points : 37 008
    Points
    37 008
    Par défaut
    Citation Envoyé par papajoker Voir le message
    MAIS, ici c'est surtout que ce code n'a pas de sens fermeture pour open() décalée ? car open() ne prend pas une liste en paramètre
    Tu désirais écrire ?
    Ce code a du sens puisqu'on comprend ce qu'on veut faire. Par contre, il est laxiste (le mien aussi) côté parenthèses.
    Son exécution devrait planter vu ce qu'on passe à Image.open.... et l'erreur (une faute de frappe) est facile à corriger.

    - W

  13. #13
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 735
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 735
    Points : 31 060
    Points
    31 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par papajoker Voir le message
    format ou f-string , ... c'est exactement la même chose au niveau de l'interpréteur
    J'ai vu par ci/par là que f_string était plus rapide car interprété lors de la compilation (py vers pyc) tandis que les autres façons d'écrire étaient interprétées à l'exécution. Ceci dit ça me semble bizarre (si on affiche une expression issue de fonction, c'est à l'exécution que la fonction est exécutée). Peut-être j'ai pas bien lu (c'était en anglais) ou alors ce n'est valable que pour des expression très spécifiques ce qui le rend donc malgré tout plus efficace. Ce qui ne m'empêche pas de ne pas l'aimer. Je trouve que format() (ainsi que son ancètre %) permet plus de souplesse. M'est arrivé d'afficher dans des fenêtres de debug des trucs en rafale style...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> x=123
    >>> y=456
    >>> z=789
    >>> print("".join("%s (%s)\n" % (v, type(v)) for v in (x, y, z)))
    123 (<class 'int'>)
    456 (<class 'int'>)
    789 (<class 'int'>)
    ... écriture qu'on peut reproduire avec format() mais que je pense les f-string incapables d'égaler (en tout cas j'ai pas réussi)

    Citation Envoyé par papajoker Voir le message
    MAIS, ici c'est surtout que ce code n'a pas de sens fermeture pour open() décalée ? car open() ne prend pas une liste en paramètre
    Mouais. Je sentais que j'avais fait une erreur qq part. Pas pu tester car je n'avais pas PIL (ok j'aurais pu simuler mais j'y suis allé sans filet). Je me suis contenté de compter les parenthèses.

    Citation Envoyé par papajoker Voir le message
    Tu désirais écrire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    images_handle = tuple(Image.open(f"chiffre_{i}.png") for i in range(1, 11))
    Non, ceci images_handle = tuple(Image.open("chiffre_{0}.png".format(i)) for i in range(1, 11))

    Citation Envoyé par papajoker Voir le message
    ok, ici nous sommes d'accord
    Oui parce que là j'ai pu tester avant de poster

  14. #14
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Points : 1 880
    Points
    1 880
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    M'est arrivé d'afficher dans des fenêtres de debug des trucs en rafale style...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> x=123
    >>> y=456
    >>> z=789
    >>> print("".join("%s (%s)\n" % (v, type(v)) for v in (x, y, z)))
    123 (<class 'int'>)
    456 (<class 'int'>)
    789 (<class 'int'>)
    ... écriture qu'on peut reproduire avec format() mais que je pense les f-string incapables d'égaler (en tout cas j'ai pas réussi)
    En F-string ça donnerait ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print("\n".join(f"{v} ({type(v)})" for v in (x, y, z)))
    En général je trouve les F-strings plus claires, mais dans un cas comme celui-ci c'est discutable. Pourtant l'expression est plus succinte. Mais il y a l'avantage qu'on ne confond pas les variables et on peut changer l'ordre d'affichage sans craindre d'induire un bug. Avoir une suite de %s me perturbe un peu.

  15. #15
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 735
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 735
    Points : 31 060
    Points
    31 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par binarygirl Voir le message
    En F-string ça donnerait ceci:
    Ah oui, moi j'avais essayé print("\n".join(f"{v} (type({v}))" for v in (x, y, z))) (inversion des accolades pour type())

  16. #16
    Membre habitué Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 495
    Points : 152
    Points
    152
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Est-ce que c'est ce que vous avez constaté après avoir testé?

    - W
    je n'ai pas vérifié mais j'ai un peu rapidement fait la confusion sur le zéro de la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     tuple("chiffre_{0}.png".format(i) for i in range(1, 11))
    Ceci étant ce que cherche c' est a simuler un DES de façon visuel via python même si ce n'est pas l’outil le plus pertinent, j ai fais des tests avec divers bibliothèque sans réellement obtenir quelque chose de satisfaisant.
    Panda3D , OPENGL , pygame, trimesh, pyrender
    fichiers STL mise en mouvement ....
    conversion de fichiers STL vers le format OBJ avec application de texture
    et la j'ai cherche a utiliser matplot

    par exemple ce code ne fait que fait entre en rotation un nuage de point on ne peut as dire que c'est un dé

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    # coding: utf-8
    import pygame 
    from pygame.locals import *
    from OpenGL.GL import *
    from OpenGL.GLU import *
    import random
     
    # Initialisation de Pygame
    pygame.init()
    width, height = 800, 600
    pygame.display.set_mode((width, height), DOUBLEBUF | OPENGL)
     
    # Configuration de la caméra
    gluPerspective(45, (width / height), 0.1, 50.0)
    glTranslatef(0.0, 0.0, -5)
     
    # Création des faces du dé
    faces = [1, 2, 3, 4, 5, 6]  # Valeurs des faces
     
    # Rotation des faces
    angles = [0.0] * 6
    clock = pygame.time.Clock()
    while True:
        clock.tick(60)  # Limite la boucle principale à 60 FPS
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
     
        glRotatef(1, 1, 1, 1)  # Rotation générale du dé
     
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
     
        # Dessiner les faces du dé
        for i in range(6):
            glPushMatrix()
            glRotatef(angles[i], 1, 1, 1)  # Rotation de la face individuelle
            glBegin(GL_POINTS)
            glColor3f(1.0, 1.0, 1.0)  # Couleur des points (blanc)
            for _ in range(faces[i]):
                x = random.uniform(-0.5, 0.5)
                y = random.uniform(-0.5, 0.5)
                glVertex3f(x, y, 0.0)  # Dessine un point
            glEnd()
            glPopMatrix()
     
            angles[i] += random.uniform(0.5, 2.0)  # Variation de l'angle de rotation de la face
     
        pygame.display.flip()


    cette exemple de code qui a fonctionner 2 minutes et qui actuellement renvoi un cadre totalement noir et vide . Comme si l'interprétation de la couche openGL était des plus aléatoire

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    # coding: utf-8
    import pygame
    from pygame.locals import *
    from OpenGL.GL import *
    from OpenGL.GLU import *
    import random
     
    # Initialisation de Pygame
    pygame.init()
    width, height = 800, 600
    pygame.display.set_mode((width, height), DOUBLEBUF | OPENGL)
     
    # Configuration de la caméra
    gluPerspective(45, (width / height), 0.1, 50.0)
    glTranslatef(0.0, 0.0, -5)
     
    # Création des faces du cube
    faces = []
    for _ in range(6):
        color = (random.uniform(0, 1), random.uniform(0, 1), random.uniform(0, 1))
        faces.append(color)
     
    # Rotation des faces
    angles = [0.0] * 6
    clock = pygame.time.Clock()
    while True:
        clock.tick(60)  # Limite la boucle principale à 60 FPS
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
     
        glRotatef(1, 1, 1, 1)  # Rotation générale du cube
     
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
     
        # Dessiner les faces du cube
        for i in range(6):
            glPushMatrix()
            glRotatef(angles[i], 1, 1, 1)  # Rotation de la face individuelle
            glBegin(GL_QUADS)
            glColor3fv(faces[i])
            if i == 0:  # Face 1 (rouge)
                glVertex3fv((1, 1, -1))
                glVertex3fv((-1, 1, -1))
                glVertex3fv((-1, -1, -1))
                glVertex3fv((1, -1, -1))
            elif i == 1:  # Face 2 (vert)
                glVertex3fv((1, 1, 1))
                glVertex3fv((1, 1, -1))
                glVertex3fv((1, -1, -1))
                glVertex3fv((1, -1, 1))
            elif i == 2:  # Face 3 (bleu)
                glVertex3fv((-1, 1, 1))
                glVertex3fv((1, 1, 1))
                glVertex3fv((1, -1, 1))
                glVertex3fv((-1, -1, 1))
            elif i == 3:  # Face 4 (orange)
                glVertex3fv((-1, 1, -1))
                glVertex3fv((-1, 1, 1))
                glVertex3fv((-1, -1, 1))
                glVertex3fv((-1, -1, -1))
            elif i == 4:  # Face 5 (jaune)
                glVertex3fv((1, 1, 1))
                glVertex3fv((-1, 1, 1))
                glVertex3fv((-1, 1, -1))
                glVertex3fv((1, 1, -1))
            elif i == 5:  # Face 6 (violet)
                glVertex3fv((-1, -1, -1))
                glVertex3fv((-1, -1, 1))
                glVertex3fv((1, -1, 1))
                glVertex3fv((1, -1, -1))
            glEnd()
            glPopMatrix()
     
            angles[i] += random.uniform(0.5, 2.0)  # Variation de l'angle de rotation de la face
     
        pygame.display.flip()

    Cette autre exemple bien que fonctionnel devra faire l'objet d'évolution car peu réaliste en l'état est relativement statique


    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    # coding: utf-8
    import pygame
    from pygame.locals import *
    from OpenGL.GL import *
    from OpenGL.GLU import *
    import random
     
    # Initialisation de Pygame
    pygame.init()
    width, height = 800, 600
    pygame.display.set_mode((width, height), DOUBLEBUF | OPENGL)
     
    # Configuration de la caméra
    gluPerspective(45, (width / height), 0.1, 50.0)
    glTranslatef(0.0, 0.0, -5)
     
    # Création des faces du cube
    faces = []
    for _ in range(6):
        color = (random.uniform(0, 1), random.uniform(0, 1), random.uniform(0, 1))
        faces.append(color)
     
    # Rotation des faces
    clock = pygame.time.Clock()
    while True:
        clock.tick(60)  # Limite la boucle principale à 60 FPS
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
     
        glRotatef(1, random.uniform(-1, 1), random.uniform(-1, 1), random.uniform(-1, 1))
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
     
        # Dessiner les faces du cube
        glBegin(GL_QUADS)
        for i in range(6):
            glColor3fv(faces[i])
            if i == 0:  # Face 1 (rouge)
                glVertex3fv((1, 1, -1))
                glVertex3fv((-1, 1, -1))
                glVertex3fv((-1, -1, -1))
                glVertex3fv((1, -1, -1))
            elif i == 1:  # Face 2 (vert)
                glVertex3fv((1, 1, 1))
                glVertex3fv((1, 1, -1))
                glVertex3fv((1, -1, -1))
                glVertex3fv((1, -1, 1))
            elif i == 2:  # Face 3 (bleu)
                glVertex3fv((-1, 1, 1))
                glVertex3fv((1, 1, 1))
                glVertex3fv((1, -1, 1))
                glVertex3fv((-1, -1, 1))
            elif i == 3:  # Face 4 (orange)
                glVertex3fv((-1, 1, -1))
                glVertex3fv((-1, 1, 1))
                glVertex3fv((-1, -1, 1))
                glVertex3fv((-1, -1, -1))
            elif i == 4:  # Face 5 (jaune)
                glVertex3fv((1, 1, 1))
                glVertex3fv((-1, 1, 1))
                glVertex3fv((-1, 1, -1))
                glVertex3fv((1, 1, -1))
            elif i == 5:  # Face 6 (violet)
                glVertex3fv((-1, -1, -1))
                glVertex3fv((-1, -1, 1))
                glVertex3fv((1, -1, 1))
                glVertex3fv((1, -1, -1))
        glEnd()
     
        pygame.display.flip()

  17. #17
    Membre habitué Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 495
    Points : 152
    Points
    152
    Par défaut numpy-stl et afficher un fichier bstl
    Est il envisageable d utiliser numpy-stl pour utiliser un modèle stl et l afficher avec un effet de mouvement alartoire?

  18. #18
    Membre habitué Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 495
    Points : 152
    Points
    152
    Par défaut
    Voici un code qui semble tourner.
    Problème l'animation produite par dans tous les sens.

    Les faces du cube partent de façon non ordonnées ?

    il semble que la rotation de chaque face ne soit pas synchronisée


    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    # coding: utf-8
    import pygame
    from pygame.locals import *
    from OpenGL.GL import *
    from OpenGL.GLU import *
    import random
     
    # Initialisation de Pygame
    pygame.init()
    width, height = 800, 600
    pygame.display.set_mode((width, height), DOUBLEBUF | OPENGL)
     
    # Configuration de la caméra
    gluPerspective(45, (width / height), 0.1, 50.0)
    glTranslatef(0.0, 0.0, -5)
     
    # Création des faces du cube
    faces = []
    for _ in range(6):
        color = (random.uniform(0, 1), random.uniform(0, 1), random.uniform(0, 1))
        faces.append(color)
     
    # Rotation des faces
    angles = [0.0] * 6
    clock = pygame.time.Clock()
    while True:
        clock.tick(60)  # Limite la boucle principale à 60 FPS
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
     
        glRotatef(1, 1, 1, 1)  # Rotation générale du cube
     
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
     
        # Dessiner les faces du cube
        for i in range(6):
            glPushMatrix()
            glRotatef(angles[i], 1, 1, 1)  # Rotation de la face individuelle
            glBegin(GL_QUADS)
            glColor3fv(faces[i])
            if i == 0:  # Face 1 (rouge)
                glVertex3fv((1, 1, -1))
                glVertex3fv((-1, 1, -1))
                glVertex3fv((-1, -1, -1))
                glVertex3fv((1, -1, -1))
            elif i == 1:  # Face 2 (vert)
                glVertex3fv((1, 1, 1))
                glVertex3fv((1, 1, -1))
                glVertex3fv((1, -1, -1))
                glVertex3fv((1, -1, 1))
            elif i == 2:  # Face 3 (bleu)
                glVertex3fv((-1, 1, 1))
                glVertex3fv((1, 1, 1))
                glVertex3fv((1, -1, 1))
                glVertex3fv((-1, -1, 1))
            elif i == 3:  # Face 4 (orange)
                glVertex3fv((-1, 1, -1))
                glVertex3fv((-1, 1, 1))
                glVertex3fv((-1, -1, 1))
                glVertex3fv((-1, -1, -1))
            elif i == 4:  # Face 5 (jaune)
                glVertex3fv((1, 1, 1))
                glVertex3fv((-1, 1, 1))
                glVertex3fv((-1, 1, -1))
                glVertex3fv((1, 1, -1))
            elif i == 5:  # Face 6 (violet)
                glVertex3fv((-1, -1, -1))
                glVertex3fv((-1, -1, 1))
                glVertex3fv((1, -1, 1))
                glVertex3fv((1, -1, -1))
            glEnd()
            glPopMatrix()
     
            angles[i] += random.uniform(0.5, 2.0)  # Variation de l'angle de rotation de la face
     
        pygame.display.flip()

  19. #19
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 426
    Points : 37 008
    Points
    37 008
    Par défaut
    Citation Envoyé par dedalios Voir le message
    il semble que la rotation de chaque face ne soit pas synchronisée
    Pourquoi colorier les faces du cube à chaque itération plutôt que faire tourner un cube prédéfini?
    Votre code ne ressemble pas aux exemples donnés dans les tutos... il faut partir de là et modifier ensuite (en essayant de comprendre ce qu'on fait). Vous avez un exemple ici (et s'il ne vous convient pas, libre à vous d'en trouver d'autres).

    - W

Discussions similaires

  1. Problème avec matplotlib
    Par TimStudent56 dans le forum Général Python
    Réponses: 4
    Dernier message: 13/06/2022, 19h25
  2. [Python 2.X] Problème avec MatPlotLib
    Par AlexBsd dans le forum Général Python
    Réponses: 3
    Dernier message: 11/05/2017, 09h13
  3. [Python 3.X] problème avec matplotlib
    Par abdou313 dans le forum Général Python
    Réponses: 1
    Dernier message: 19/05/2015, 04h18
  4. Problème avec Matplotlib
    Par Pacome1973 dans le forum Calcul scientifique
    Réponses: 1
    Dernier message: 23/02/2014, 15h14
  5. problème avec matplotlib
    Par mortal dans le forum Calcul scientifique
    Réponses: 6
    Dernier message: 27/01/2014, 10h30

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