[英]Plot a 3D Surface of a polyhedron
我正在嘗試使用 Python 和 Matplotlib 來渲染多面體的 3D 表面,由
但是我的代碼(如下所示)似乎沒有正確繪制它。 應該怎么做呢?
失敗的嘗試:
%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)
這是一種解決方案:
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()
圖形輸出是這樣的:立方體的表面
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.