2015-09-22 4 views
2

Я пытаюсь использовать Python и Matplotlib для визуализации 3D поверхности многогранника, задаваемыйучасток 3D-поверхности многогранника

enter image description here

Однако мой код (как показано ниже), похоже, не нарисуйте его правильно. Как это сделать?

неудачной попытки:

enter image description here

%matplotlib inline 

import numpy as np 
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D 
from matplotlib import cm 
from matplotlib.ticker import LinearLocator, FormatStrFormatter 



delta = 0.1 

def x_func(x): 
    return abs(x) 

def y_func(y): 
    return abs(y) 

def z_func(z): 
    return abs(z) 


x = np.arange(-1, 1, delta) 
x1 = x_func(x) 

y = np.arange(-1, 1, delta) 
y1 = y_func(y) 

X, Y = meshgrid(x1, y1) 

z = np.arange(-1, 1, delta) 
Z = z_func(z) 

fig = plt.figure() 
ax = fig.gca(projection='3d') 
ax.set_xlim([-1,1]) 
ax.set_ylim([-1,1]) 
ax.set_zlim([-1,1]) 
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.RdBu, linewidth=0.1) 

ответ

2

Вот одно решение:

import mpl_toolkits.mplot3d as a3 
import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.colors as colors 
import scipy as sp 
# Vertex data 
verts= [  
     (-1, -1, -1), (-1, -1, 1), (-1, 1, 1), (-1, 1, -1), 
     (1, -1, -1), (1, -1, 1), (1, 1, 1), (1, 1, -1) 
     ] 

# Face data 
faces = np.array([ 
    [0, 1, 2, 3], [4, 5, 6, 7], [0, 3, 7, 4], [1, 2, 6, 5],  
    [0, 1, 5, 4], [2, 3, 7, 6] 
    ]) 

ax = a3.Axes3D(plt.figure()) 
ax.dist=30 
ax.azim=-140 
ax.elev=20[enter image description here][1] 
ax.set_xlim([-1,1]) 
ax.set_ylim([-1,1]) 
ax.set_zlim([-1,1]) 

for i in np.arange(len(faces)): 
    square=[ verts[faces[i,0]], verts[faces[i,1]], verts[faces[i, 2]], verts[faces[i, 3]]] 
    face = a3.art3d.Poly3DCollection([square]) 
    face.set_color(colors.rgb2hex(sp.rand(3))) 
    face.set_edgecolor('k') 
    face.set_alpha(0.5) 
    ax.add_collection3d(face) 

plt.show() 

Выход фигуры заключается в следующем: The surface of a cube

Смежные вопросы