我想生成一个看起来像半球的表面。到目前为止我所做的是读取已经存在的BEM网格并尝试在其上显示标量值。但现在我必须在半球而不是Bem网格上显示标量值。而且我不知道如何使用看起来像半球的三角形网格来生成。
这个半球需要包含一组N个点(x,y,z)[使用mlab.triangular_mesh]并且在每个顶点我需要将N个数据(浮点数)表示为值或使用变量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')
答案 0 :(得分:0)
正如其他人已经指出你的问题不是很清楚,并且不包含一个容易重现的例子 - 你的例子需要相当多的工作才能让我们重现,而你没有详细描述你所采取的步骤。
你尝试做什么很容易。可以为每个顶点(即每个VTK点)定义标量:
surf = mlab.triangular_mesh(x,y,z,triangles)
surf.mlab_source.scalars = t
你需要设置一个标志来让它们出现,我认为这可能是你的问题:
surf.actor.mapper.scalar_visibility=True
这是生成半球的一些代码。它产生一个VTK聚数据。我不是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))