python tirage parallélépipède
Je suis en train de dessiner un parallélépipède. En fait j'ai commencé par le script python dessin d'un cube:
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
points = np.array([[-1, -1, -1],
[1, -1, -1 ],
[1, 1, -1],
[-1, 1, -1],
[-1, -1, 1],
[1, -1, 1 ],
[1, 1, 1],
[-1, 1, 1]])
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
r = [-1,1]
X, Y = np.meshgrid(r, r)
ax.plot_surface(X,Y,1, alpha=0.5)
ax.plot_surface(X,Y,-1, alpha=0.5)
ax.plot_surface(X,-1,Y, alpha=0.5)
ax.plot_surface(X,1,Y, alpha=0.5)
ax.plot_surface(1,X,Y, alpha=0.5)
ax.plot_surface(-1,X,Y, alpha=0.5)
ax.scatter3D(points[:, 0], points[:, 1], points[:, 2])
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()
Afin d'obtenir un parallélépipède, j'ai multiplié les points de la matrice par la matrice suivante:
P =
[[2.06498904e-01 -6.30755443e-07 1.07477548e-03]
[1.61535574e-06 1.18897198e-01 7.85307721e-06]
[7.08353661e-02 4.48415767e-06 2.05395893e-01]]
:
Z = np.zeros((8,3))
for i in range(8):
Z[i,:] = np.dot(points[i,:],P)
Z = 10.0*Z
Mon idée est alors de représenter comme suit:
ax.scatter3D(Z[:, 0], Z[:, 1], Z[:, 2])
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()
Et c'est ce que j'obtiens:
Comment puis-je mettre surfaces sur ces différents points pour former le parallélépipède (dans la façon de le cube ci-dessus)?
OriginalL'auteur rogwar | 2017-07-03
Vous devez vous connecter pour publier un commentaire.
Parcelle de surfaces 3D PolyCollection (exemple)
Est-il un moyen de coller ce cube sur une image 2D?
OriginalL'auteur pcu
Étant donné que le titre de cette question est "python dessiner en 3D cube", c'est l'article que j'ai trouvé quand j'ai googlé cette question.
Dans le but de ceux qui font la même chose que moi, qui veulent tout simplement de dessiner un cube, j'ai créé la fonction suivante, qui prend quatre points d'un cube, d'un coin tout d'abord, et puis les trois points adjacents à ce coin.
Il représente le cube.
La fonction est ci-dessous:
Donner le résultat:
OriginalL'auteur SimonBiggs
Voir mon autre réponse (https://stackoverflow.com/a/49766400/3912576) pour une solution plus simple.
Ici est un ensemble complexe de fonctions qui font de matplotlib échelle de mieux et toujours les forces de l'entrée pour être un cube.
Le premier paramètre passé à cubify_cube_definition est le point de départ, le deuxième paramètre est le second point, le cube de la longueur est définie à partir de ce point, le troisième est un point de rotation, il sera déplacé pour correspondre à la longueur de la première et de la seconde.
Qui produit le résultat suivant:
OriginalL'auteur SimonBiggs
Fait à l'aide de matplotlib et la géométrie des coordonnées
OriginalL'auteur Preetham Dasari