python 三维装箱可视化图代码

文章目录

  • 描述
  • 基本思路
  • 代码
  • 具体结果
  • 结尾

描述

问题背景,参数,模型和约束条件可以看我前一篇文章: C++调用CPLEX实现三位装箱.这里是只给出后面用python实现三维装箱可视化的代码。

基本思路

使用python中的matplotlib库中的Axe3D方法实现多个箱子的堆叠。

代码

以下是 代码.

// An highlighted block
# -*- coding: utf-8 -*-
# @Author: tobby

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
cartonnum=10;
# %matplotlib inline

class Cartons:

    def __init__(self, x, y, z, length, width, height, xl, zl, zh, yw):
        self.x = x
        self.y = y
        self.z = z
        self.length = length
        self.width = width
        self.height = height
        self.xl = xl
        self.zl = zl
        self.zh = zh
        self.yw = yw



    def ifxl(self):
        return bool(self.xl)

    def ifzl(self):
        return bool(self.zl)

    def ifzh(self):
        return bool(self.zh)

    def ifyw(self):
        return bool(self.yw)

a=[
 [0	,	22	,	0	,	36	,	36	,	36	,	0	,	0	,	0	,	0],
 [0	,	0	,	0	,	59	,	39	,	20	,	0	,	1	,	0	,	0],
 [40	,	37	,	14	,	54	,	40	,	21	,	0	,	1	,	0	,	0],
 [59	,	0	,	0	,	58	,	37	,	21	,	0	,	1	,	0	,	1],
 [39	,	0	,	16	,	52	,	33	,	20	,	0	,	1	,	0	,	1],
 [0	,	37	,	37	,	40	,	31	,	21	,	1	,	0	,	0	,	0],
 [0	,	20	,	37	,	31	,	31	,	17	,	1	,	0	,	0	,	0],
 [42	,	0	,	0	,	31	,	17	,	16	,	0	,	0	,	1	,	0],
[36	,	32	,	0	,	26	,	23	,	14	,	0	,	0	,	1	,	0],
 [59	,	4	,	64	,	33	,	21	,	4	,	0	,	0	,	1	,	0]
# [27	,	0	,	17	,	61	,	47	,	32	,	0	,	1	,	0	,	0],
# [0	,	3	,	0	,	54	,	40	,	21	,	0	,	0	,	0	,	0],
# [21	,	36	,	0	,	54	,	40	,	21	,	1	,	0	,	0	,	0],
# [47	,	36	,	40	,	40	,	31	,	21	,	0	,	1	,	0	,	0],
# [0	,	36	,	49	,	40	,	31	,	21	,	1	,	0	,	0	,	0],
# [0	,	0	,	40	,	40	,	31	,	21	,	0	,	1	,	0	,	1],
# [47	,	5	,	0	,	31	,	31	,	17	,	0	,	0	,	1	,	0],
# [74	,	0	,	59	,	33	,	21	,	4	,	0	,	0	,	0	,	0]


]


carton = [Cartons(a[i][0],a[i][1],a[i][2],a[i][3],a[i][4],a[i][5],a[i][6],a[i][7],a[i][8],a[i][9]) for i in range(cartonnum)]

if __name__ == "__main__":
    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1, projection='3d')
for i in range(0,cartonnum):
    x=carton[i].x
    y=carton[i].y
    z=carton[i].z
    if  carton[i].ifyw() and  carton[i].ifzl() :#高 宽 长
        dx=carton[i].height
        dy=carton[i].width
        dz=carton[i].length


    elif(not carton[i].ifyw() )and (carton[i].ifzl()):#宽 高 长

        dx=carton[i].width
        dy=carton[i].height
        dz = carton[i].length
    elif (not carton[i].ifyw()) and (carton[i].ifxl()):#长 高 宽
        dx = carton[i].length
        dy = carton[i].height
        dz = carton[i].width

    elif (not carton[i].ifyw() )and  (carton[i].ifzh() ):#宽 长 高
        dx=carton[i].width
        dy=carton[i].length
        dz=carton[i].height

    elif (not carton[i].ifzh() ) and (not carton[i].ifxl()) and(not carton[i].ifzl()):#高 长 宽
        dx=carton[i].height
        dy=carton[i].length
        dz=carton[i].width
    else:#长 宽 高
        dx = carton[i].length
        dy = carton[i].width
        dz = carton[i].height


    ax.bar3d(x, y, z, dx, dy, dz, shade=True)


ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z(value)')
#plt.axis('scaled')
plt.show()


具体结果

python 三维装箱可视化图代码_第1张图片

结尾

上一篇还是一年前写的文章,发现有很多小伙伴问可视化图的代码,小白代码写的并不好,大家多多谅解哈哈。

你可能感兴趣的:(装箱)