使用Python

时间:2015-10-27 19:15:37

标签: python mayavi point-clouds

我在3D中有一些点,每个点都有一个数字。 我想从这些点推断一个表面,并根据每个点的相关数字进行着色,这是一个很好的例子:http://docs.enthought.com/mayavi/mayavi/auto/example_surface_from_irregular_data.html
在我的例子中,这些点可以在有孔或在圆柱体上的平面上,例如:

from mayavi import mlab
import numpy as np
import random

R = 20
r = 15

points = list()
for i in np.linspace(0, 2*np.pi, 20):
    points.append([ R*np.cos(i), R*np.sin(i), 0.0, random.random() ])
    points.append([ r*np.cos(i), r*np.sin(i), 0.0, random.random() ])
points = np.array(points)

x = points[:,0]
y = points[:,1]
z = points[:,2]
c = points[:,3]

mlab.figure(fgcolor=(0, 0, 0), bgcolor=(1, 1, 1))
pts = mlab.points3d(x, y, z, c, scale_mode='none', scale_factor=0.2)
mesh = mlab.pipeline.delaunay2d(pts)
surf = mlab.pipeline.surface(mesh, colormap='jet')
mlab.points3d(x,y,z,c, scale_mode='none', scale_factor=2)
mlab.savefig('1.png')

#%% Cylinder
points = list()
for j in np.linspace(0, 50, 10):
    for i in np.linspace(0, 2*np.pi, 20):
        points.append([ R*np.cos(i), R*np.sin(i), j, random.random() ])
points = np.array(points)

x = points[:,0]
y = points[:,1]
z = points[:,2]
c = points[:,3]

mlab.figure(fgcolor=(0, 0, 0), bgcolor=(1, 1, 1))
pts = mlab.points3d(x, y, z, c, scale_mode='none', scale_factor=0.2)
mesh = mlab.pipeline.delaunay3d(pts)
surf = mlab.pipeline.surface(mesh, colormap='jet')
mlab.points3d(x,y,z,c, scale_mode='none', scale_factor=2)
mlab.savefig('2.png')

下图显示了结果: results
如你所见:
- “平面”图没有孔
- “圆筒”沿侧面未完全封闭,顶面和底面关闭 所以在我看来这些问题可以解决,设置一个点到点的最大距离被视为网格的一部分,但我无法找到delaunay2d或delaunay3d的任何选项。 你知道其他选择吗?

由于

0 个答案:

没有答案