使用三角形网格生成半球面,并在每个顶点表示数据(值或颜色)

2024-09-28 19:00:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我想生成一个看起来像半球的曲面。。到目前为止,我所做的是读取一个已经存在的边界元网格,并尝试显示其上的标量值。但是现在我要在半球上显示标量值,而不是边界元法网格。我不知道如何使用看起来像半球的三角形网格生成。在

这个半球需要包含一组N个点(x,y,z)[使用mlab.三角形网格]在每个顶点,我需要将N个数据(float)表示为一个值或使用colormap中的变化(例如:蓝色(数据的最低值)到红色(数据的最高值))。data=它是一个2562大小的数组,一组浮点值,可以随机生成作为另一个代码的一部分。点是另一组代码的一部分太好了形状(2562,3)。但形状不是半球 这是我用BEM曲面观察的程序

fname = data_path + '/subjects/sample/bem/sample-5120-5120-5120-bem-sol.fif'
surfaces = mne.read_bem_surfaces(fname, add_geom=True)
print "Number of surfaces : %d" % len(surfaces) 
head_col = (0.95, 0.83, 0.83)  # light pink
colors = [head_col]
try:
     from enthought.mayavi import mlab
except:
     from mayavi import mlab
mlab.figure(size=(600, 600), bgcolor=(0, 0, 0))
for c, surf in zip(colors, surfaces):
    points = surf['rr']
    faces = surf['tris']
    s=data
    mlab.triangular_mesh(points[:, 0], points[:, 1], points[:, 2],faces,color=c, opacity=1,scalars=s[:,0])



#mesh= mlab.triangular_mesh(x,y,z,triangles,representation='wireframe',opacity=0)        #point_data=mesh.mlab_source.dataset.point_data
#point_data.scalars=t
#point_data.scalars.name='Point data'
#mesh2=  mlab.pipeline.set_active_attribute(mesh,point_scalars='Point data')

Tags: 数据网格datasurfpointspoint边界标量
1条回答
网友
1楼 · 发布于 2024-09-28 19:00:26

正如其他人所指出的,你的问题不是很清楚,而且不包括一个容易复制的例子,你的例子将需要我们大量的工作来重现,而你没有很清楚地描述你所采取的步骤。在

你想做的事情很容易。可以为每个顶点(即每个VTK点)定义标量:

surf = mlab.triangular_mesh(x,y,z,triangles)
surf.mlab_source.scalars = t

你需要设置一个标志让它们出现,我想这可能是你的问题:

^{pr2}$

下面是一些生成半球体的代码。它产生一个VTK polydata。我不能100%确定mayavi源是否与triangular_mesh相同的源类型,但我认为是这样。在

res = 250. #desired resolution (number of samples on sphere)
phi,theta = np.mgrid[0:np.pi:np.pi/res, 0:np.pi:np.pi/res]

x=np.cos(theta) * np.sin(phi)
y=np.sin(theta) * np.sin(phi)
z=np.cos(phi)

mlab.mesh(x,y,z,color=(1,1,1))

相关问题 更多 >