使用Python绘制具有颜色强度的立方体

时间:2014-11-12 13:25:40

标签: python 3d cube mayavi pyopengl

我想知道如何用Python绘制许多立方体。对于每个立方体,我有其坐标(Xmin,Xmax,Ymin,Ymax,Zmin,Zmax)及其根据该值绘制立方体的值。事实上,我真的想要画出体素。

我见过像matplotlib,mayavi,OpenGL这样的库,但我不知道要使用哪些库以及如何使用。我认为这并不难,因为立方体很容易成为常规人物,但我无法达到解决方案。

由于我必须绘制许多立方体,最好设置范围,而不是代表所有立方体,我知道mayavi有这个选项。

2 个答案:

答案 0 :(得分:0)

在mayavi中,您可以使用mlab.points3d的预定义形状列表设置字形类型。

points = mlab.points3d(px, py, pz, mode='cube')

这将绘制立方体中心每个点的立方体。

您还可以绘制字形,然后使用

更改源类型
points.glyph.glyph_source.glyph_source = points.glyph.glyph_source.glyph_dict['cube_source']

(您也可以在管道菜单中执行此操作)

scale_factor参数将允许您更改多维数据集大小。

通过体素数据绘制体素是一种不方便的方法,但它会按照您的要求进行。

答案 1 :(得分:0)

例如,在mayavi中,您可以使用mesh绘制立方体的面。

from mayavi import mlab
import numpy as np

def cube_faces(xmin, xmax, ymin, ymax, zmin, zmax):
    faces = []

    x,y = np.mgrid[xmin:xmax:3j,ymin:ymax:3j]
    z = np.ones(y.shape)*zmin
    faces.append((x,y,z))

    x,y = np.mgrid[xmin:xmax:3j,ymin:ymax:3j]
    z = np.ones(y.shape)*zmax
    faces.append((x,y,z))

    x,z = np.mgrid[xmin:xmax:3j,zmin:zmax:3j]
    y = np.ones(z.shape)*ymin
    faces.append((x,y,z))

    x,z = np.mgrid[xmin:xmax:3j,zmin:zmax:3j]
    y = np.ones(z.shape)*ymax
    faces.append((x,y,z))

    y,z = np.mgrid[ymin:ymax:3j,zmin:zmax:3j]
    x = np.ones(z.shape)*xmin
    faces.append((x,y,z))

    y,z = np.mgrid[ymin:ymax:3j,zmin:zmax:3j]
    x = np.ones(z.shape)*xmax
    faces.append((x,y,z))

    return faces

def mlab_plt_cube(xmin,xmax,ymin,ymax,zmin,zmax):
    faces = cube_faces(xmin,xmax,ymin,ymax,zmin,zmax)
    for grid in faces:
        x,y,z = grid
        mlab.mesh(x,y,z,opacity=0.4)

mlab_plt_cube(0,1,0,1,0,1)
mlab.show()

我敢打赌,cube_faces函数有一个内胆。我太累了,无法在第二秒考虑一下。