Python画3D
Posted yangbocsu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python画3D相关的知识,希望对你有一定的参考价值。
# -*- coding: utf-8 -*-
from matplotlib import pyplot as plt
#设置图表刻度等格式
from matplotlib.ticker import MultipleLocator, FormatStrFormatter
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
#make_pic的内置函数,用来在图像里面不断添加立方体
def box(ax,x, y, z, dx, dy, dz, color='red'):
xx = [x, x, x+dx, x+dx, x]
yy = [y, y+dy, y+dy, y, y]
kwargs = {'alpha': 1, 'color': color}
ax.plot3D(xx, yy, [z]*5, **kwargs)#下底
ax.plot3D(xx, yy, [z+dz]*5, **kwargs)#上底
ax.plot3D([x, x], [y, y], [z, z+dz], **kwargs)
ax.plot3D([x, x], [y+dy, y+dy], [z, z+dz], **kwargs)
ax.plot3D([x+dx, x+dx], [y+dy, y+dy], [z, z+dz], **kwargs)
ax.plot3D([x+dx, x+dx], [y, y], [z, z+dz], **kwargs)
return ax
#显示图形的函数:Items = [[num[0],num[1],num[2],num[3],num[4],num[5],num[6]],]
#Items是N个列表的列表,里面的每个列表数据[放置点O三维坐标,长宽高,颜色]
def make_pic(Items):
fig = plt.figure()
ax = Axes3D(fig)
ax.xaxis.set_major_locator(MultipleLocator(50))
ax.yaxis.set_major_locator(MultipleLocator(50))
ax.zaxis.set_major_locator(MultipleLocator(50))
for num in Items:
box(ax,num[0],num[1],num[2],num[3],num[4],num[5],num[6])
plt.title('Cube')
plt.show()
#根据图显需要的数据,把尺寸数据生成绘图数据的函数
def make(O,C,color):
data = [O[0],O[1],O[2],C[0],C[1],C[2],color]
return data
#1.给定空间容器C
#内容积为:长4.2x宽1.9x高1.8米
O = (0,0,0) #原点坐标
C = (420,190,180) #箱体长宽高
color = 'red' #箱体颜色
#显示箱体
make_pic([make(O,C,color)]) #这个为直接显示箱体看下效果
show_num = [make(O,C,color)] #这个为后面组合显示时,把箱体显示数据添加到所有要显示的数据里面
#2.给定有限量个方体 1200个(60,40,50)的方体
B=[]
for num in range(0,1200):
B.append((60,40,50))
#如果在后面的考虑不同方体的装箱时,方体大小存在差异,我们将优先按照体积大小降序排列,优先摆放大体积的
#因为按照模拟装箱的情况,当大箱子摆放后产生的可放置点,能在上方放置边长不大于或者大于小部分的物体,可选物体范围更大
#3.拟人化依次堆叠方体,假设这里不考虑方体朝向/重心/堆叠限制,如果有大小差异考虑方体最大悬空面积为30%
#第一个方体的位置从原点开始
color2='blue'
show_num.append(make(O,B[0],color2))
make_pic(show_num)#查看图显效果
以上是关于Python画3D的主要内容,如果未能解决你的问题,请参考以下文章