2016-09-09 4 views
2

Ich bin neu zu 3D-Plotten. Ich möchte nur eine Pyramide aus 5 Punkten bauen und eine Ebene durchschneiden. Mein Problem ist, dass ich nicht weiß, wie man die Seiten füllt.Python 3d Pyramide

points = np.array([[-1, -1, -1], 
        [1, -1, -1 ], 
        [1, 1, -1], 
        [-1, 1, -1], 
        [0, 0 , 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,0.5, alpha=0.5, facecolors='r') 


ax.scatter3D(points[:, 0], points[:, 1], points[:, 2]) 
ax.set_xlabel('X') 
ax.set_ylabel('Y') 
ax.set_zlabel('Z') 
plt.show() 

Jede Hilfe wird geschätzt.

Antwort

2

Sie haben Polygone zu verwenden:

from matplotlib import pyplot as plt 
from mpl_toolkits.mplot3d.art3d import Poly3DCollection, Line3DCollection 
import numpy as np 

fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 

# vertices of a pyramid 
v = np.array([[-1, -1, -1], [1, -1, -1], [1, 1, -1], [-1, 1, -1], [0, 0, 1]]) 
ax.scatter3D(v[:, 0], v[:, 1], v[:, 2]) 

# generate list of sides' polygons of our pyramid 
verts = [ [v[0],v[1],v[4]], [v[0],v[3],v[4]], 
[v[2],v[1],v[4]], [v[2],v[3],v[4]], [v[0],v[1],v[2],v[3]]] 

# plot sides 
ax.add_collection3d(Poly3DCollection(verts, 
facecolors='cyan', linewidths=1, edgecolors='r', alpha=.25)) 

plt.show() 

enter image description here