系列文章目录
Python 建模入门:长方体建模
一、建模需求
使用matplotlib库和mpl_toolkits.mplot3d模块来绘制一个长方体
二、源代码
代码如下:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
def draw_cuboid(length, width, height):
# 长方体的顶点
# 假设长方体的底部在xy平面上,顶点按逆时针方向排列
vertices = [
[0, 0, 0], # 底面左下角
[length, 0, 0], # 底面右下角
[length, width, 0], # 底面右上角
[0, width, 0], # 底面左上角
[0, 0, height], # 顶面左下角
[length, 0, height], # 顶面右下角
[length, width, height], # 顶面右上角
[0, width, height] # 顶面左上角
]
# 长方体的六个面
# 每个面由两个三角形组成,每个三角形由三个顶点索引定义
faces = [
(0, 1, 2, 3), # 底面
(0, 3, 7, 4), # 前面
(1, 2, 6, 5), # 后面
(1, 5, 4, 0), # 右面
(2, 3, 6, 7), # 左面
(4, 5, 6, 7) # 顶面
]
# 创建3D图形
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 绘制长方体的面
for face in faces:
polygon = [vertices[index] for index in face]
face_collection = Poly3DCollection([polygon], facecolors='b', linewidths=1, edgecolors='k', alpha=.25)
ax.add_collection3d(face_collection)
# 设置坐标轴范围
ax.set_xlim([0, length])
ax.set_ylim([0, width])
ax.set_zlim([0, height])
# 显示图形
plt.show()
# 调用函数绘制长方体,指定长、宽和高
draw_cuboid(3, 4, 5)
三、代码分析
1.导入matplotlib.pyplot模块,并给它起了个简短的别名plt。同时从mpl_toolkits.mplot3d.art3d导入Poly3DCollection,这个类用于绘制3D多边形集合。
2-3. 定义了一个名为draw_cuboid的函数,该函数接受length(长度)、width(宽度)和height(高度)三个参数,用于定义长方体的尺寸。
5-12. 在draw_cuboid函数内部,定义了一个名为vertices的列表,包含了长方体的8个顶点的坐标。这些顶点按照在空间中的相对位置被编号和列出。
14-19. 定义了一个名为faces的列表,包含了长方体的6个面。每个面由两个三角形组成,每组三角形由顶点的索引定义。
21-23. 创建一个新的matplotlib图形,并添加一个3D坐标轴。
25-33. 遍历faces列表中的每个面。对于每个面,提取构成该面的三角形的顶点索引,然后根据这些索引从vertices列表中获取顶点坐标。使用这些坐标创建多边形,并将其添加到Poly3DCollection中。
35-38. 设置3D坐标轴的显示范围,分别对应长方体的长度、宽度和高度。
40.调用plt.show()来显示图形。
42-44. 调用draw_cuboid函数来绘制长方体,指定长为3,宽为4,高为5。
代码中使用的Poly3DCollection对象face_collection设置了以下属性:
facecolors: 多边形面的颜色,这里是’b’,即蓝色。
linewidths: 多边形边缘的线宽。
edgecolors: 多边形边缘的颜色,这里是’k’,即黑色。
alpha: 设置多边形的透明度。
四、效果展示
总结
以上就是今天要讲的内容,运行这段代码会弹出一个窗口,显示一个3D长方体,长方体的每个面都是半透明的蓝色,边缘是黑色。坐标轴显示了长方体的尺寸和位置。