我遇到了同样的问题,并试图给出如下答案。

def cuboid_data(center, size):

"""

Create a data array for cuboid plotting.

============= ================================================

Argument Description

============= ================================================

center center of the cuboid, triple

size size of the cuboid, triple, (x_length,y_width,z_height)

:type size: tuple, numpy.array, list

:param size: size of the cuboid, triple, (x_length,y_width,z_height)

:type center: tuple, numpy.array, list

:param center: center of the cuboid, triple, (x,y,z)

"""

# suppose axis direction: x: to left; y: to inside; z: to upper

# get the (left, outside, bottom) point

o = [a - b/2 for a, b in zip(center, size)]

# get the length, width, and height

l, w, h = size

x = [[o[0], o[0] + l, o[0] + l, o[0], o[0]], # x coordinate of points in bottom surface

[o[0], o[0] + l, o[0] + l, o[0], o[0]], # x coordinate of points in upper surface

[o[0], o[0] + l, o[0] + l, o[0], o[0]], # x coordinate of points in outside surface

[o[0], o[0] + l, o[0] + l, o[0], o[0]]] # x coordinate of points in inside surface

y = [[o[1], o[1], o[1] + w, o[1] + w, o[1]], # y coordinate of points in bottom surface

[o[1], o[1], o[1] + w, o[1] + w, o[1]], # y coordinate of points in upper surface

[o[1], o[1], o[1], o[1], o[1]], # y coordinate of points in outside surface

[o[1] + w, o[1] + w, o[1] + w, o[1] + w, o[1] + w]] # y coordinate of points in inside surface

z = [[o[2], o[2], o[2], o[2], o[2]], # z coordinate of points in bottom surface

[o[2] + h, o[2] + h, o[2] + h, o[2] + h, o[2] + h], # z coordinate of points in upper surface

[o[2], o[2], o[2] + h, o[2] + h, o[2]], # z coordinate of points in outside surface

[o[2], o[2], o[2] + h, o[2] + h, o[2]]] # z coordinate of points in inside surface

return x, y, z

def test():

import matplotlib as mpl

from mpl_toolkits.mplot3d import Axes3D

import numpy as np

center = [0, 0, 0]

length = 32 * 2

width = 50 * 2

height = 100 * 2

import matplotlib.pyplot as plt

fig = plt.figure()

ax = fig.gca(projection='3d')

X, Y, Z = cuboid_data(center, (length, width, height))

ax.plot_surface(X, Y, Z, color='b', rstride=1, cstride=1, alpha=0.1)

ax.set_xlabel('X')

ax.set_xlim(-100, 100)

ax.set_ylabel('Y')

ax.set_ylim(-100, 100)

ax.set_zlabel('Z')

ax.set_zlim(-100, 100)

plt.show()

if __name__ == '__main__':

test()

Logo

电影级数字人,免显卡端渲染SDK,十行代码即可调用,工业级demo免费开源下载!

更多推荐