系列文章目录
Python 建模入门:正方体建模
文章目录
- 系列文章目录
- 一、建模需求
- 二、源代码
- 三、代码分析
- 四、效果展示
- 总结
一、建模需求
使用matplotlib库和mpl_toolkits.mplot3d模块来绘制一个立方体的3D图形
二、源代码
代码如下:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
def draw_cube():
# 立方体的八个顶点
vertices = [
[0, 0, 0], # 前下左
[1, 0, 0], # 前下右
[1, 1, 0], # 前上右
[0, 1, 0], # 前上左
[0, 0, 1], # 后下左
[1, 0, 1], # 后下右
[1, 1, 1], # 后上右
[0, 1, 1] # 后上左
]
# 立方体的六个面(每个面由两个三角形组成)
faces = [
((0, 1, 3, 2), (0, 2, 6, 5)), # 前面
((1, 2, 6, 7), (2, 3, 7, 6)), # 右面
((0, 3, 7, 4), (3, 1, 5, 7)), # 后面
((0, 4, 5, 1), (0, 1, 5, 4)), # 左面
((4, 5, 6, 7), (4, 7, 6, 2)), # 上面
((0, 3, 1, 4), (1, 2, 6, 5)) # 下面
]
# 创建3D图形
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 绘制立方体的面
for face in faces:
polygons = []
for edge in face:
polygon = [[vertices[vertex_index][0], vertices[vertex_index][1], vertices[vertex_index][2]]
for vertex_index in edge]
polygons.append(polygon)
face_collection = Poly3DCollection(polygons, facecolors='cyan', linewidths=1, edgecolors='r', alpha=.25)
ax.add_collection3d(face_collection)
# 设置坐标轴等比例
ax.set_box_aspect([1,1,1])
ax.set_xlim([0, 1])
ax.set_ylim([0, 1])
ax.set_zlim([0, 1])
# 隐藏坐标轴
plt.axis('off')
# 显示图形
plt.show()
# 调用函数绘制立方体
draw_cube()
三、代码分析
1-2行:导入matplotlib.pyplot模块,并给它起了个简短的别名plt。同时从mpl_toolkits.mplot3d.art3d导入Poly3DCollection,这个类用于绘制3D多边形集合。
4-11行:定义了一个名为draw_cube的函数,这个函数不接受任何参数,用于绘制立方体。
13-20行:在draw_cube函数内部,定义了一个名为vertices的列表,包含了立方体的8个顶点的坐标。这些顶点按照在空间中的相对位置被编号和列出。
22-27行:定义了一个名为faces的列表,包含了立方体的6个面。每个面由两组三角形组成,每组三角形由顶点的索引定义。
29-31行:创建一个新的matplotlib图形,并添加一个3D坐标轴。
33-41行:遍历faces列表中的每个面。对于每个面,提取构成该面的两个三角形的顶点索引,然后根据这些索引从vertices列表中获取顶点坐标。使用这些坐标创建多边形,并将其添加到Poly3DCollection中。
43-46行:设置3D坐标轴的比例为等比例(即所有轴的单位长度相同),并设置x、y、z轴的显示范围。
48-49行:隐藏坐标轴,使得图形看起来更干净。
51行:调用plt.show()来显示图形。
53-54行:调用draw_cube函数来绘制立方体。
代码中使用的Poly3DCollection对象face_collection设置了以下属性:
facecolors: 多边形面的颜色,这里是’cyan’,即青色。
linewidths: 多边形边缘的线宽。
edgecolors: 多边形边缘的颜色,这里是’r’,即红色。
alpha: 设置多边形的透明度。
四、效果展示
总结
以上就是今天要讲的内容,运行这段代码会弹出一个窗口,显示一个3D立方体,立方体的每个面都是半透明的青色,边缘是红色。坐标轴被隐藏,使得立方体是图中唯一的视觉焦点。