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