Python中如何将金字塔二维数组在三维空间中可视化呈现?
修改说明
你当前的代码已经正确生成了金字塔高度的二维数组,仅缺少坐标网格生成和三维曲面绘制的核心逻辑,补充对应代码即可实现和Matlab mesh() 等价的效果。另外你现有的三重循环效率极低,可以用numpy向量化操作替换,运行速度提升明显。
完整可运行代码
import numpy as np import matplotlib.pyplot as plt # 配置金字塔数组尺寸 size = 512 Pyramid = np.zeros((size, size)) # 检查是否为正方形数组 if Pyramid.shape[0] != Pyramid.shape[1]: print("ERROR: 'Not square'") exit() # 生成XY坐标网格 x = np.arange(size) y = np.arange(size) X, Y = np.meshgrid(x, y) # 向量化计算每个点的高度,和原三重循环结果完全一致 Pyramid = np.minimum.reduce([X, Y, size - 1 - X, size - 1 - Y]) # 三维绘图 fig = plt.figure(figsize=(10, 10)) ax = plt.axes(projection="3d") # 和Matlab mesh默认线框效果一致的实现,注释下一行改用面渲染 ax.plot_wireframe(X, Y, Pyramid, rstride=8, cstride=8, color="k") # 带颜色填充的曲面效果实现 # ax.plot_surface(X, Y, Pyramid, cmap="viridis", edgecolor="none") # 坐标轴标注 ax.set_xlabel("X轴") ax.set_ylabel("Y轴") ax.set_zlabel("高度") plt.show()
参数说明
rstride、cstride:控制线框/曲面的采样步长,值越大线越稀疏,避免512分辨率下线条太密无法看清- 如果你要保留原有三重循环的实现逻辑,只需要在现有代码基础上补充
np.meshgrid生成坐标、调用绘图方法的部分即可,原有高度计算逻辑是正确的。
内容的提问来源于stack exchange,提问作者0Pepega
相关产品推荐
相关产品推荐

