我使用mayavi使用以下代码从3D数组s
绘制iso表面:
src = mlab.pipeline.scalar_field(s)
fig=mlab.pipeline.iso_surface(src, color=(1.0,0.0,0.0), contours=[0.1, ], opacity=0.3)
mlab.pipeline.iso_surface(src, color=(0.0,1.0,1.0),contours=[-0.1, ], opacity=0.3)
然后我想在这个iso表面创建一个图表来表示关于等值面的一些几何信息,为此我使用一个名为geom_macro(ax)
的先前定义的函数,并通过输入来简单地调用它:
geom_macro(fig)
mlab.show()
但是我得到的情节,虽然显示了等值面的良好视图,但它有一个几乎看不见的geom_macro()
函数图,它不仅尺寸明显不能与iso表面相比,而是在“偏离中心”位置(并且具有不同的x,y,z空间方向)。如果我分别绘制两个对象,我会得到两个很好的数字
只是为了完成我所拥有的图片,定义函数的最后一部分(geom_macro()
)看起来像这样(AtPos
和Geomlst
包含(x,y,z)坐标我正在密谋,dist_btn_points
是另一个定义的函数):
for i in range (1, NCenter+1):
xp, yp, zp = AtPos[i-1][0], AtPos[i-1][1], Pos[i-1][2]
AtRadii=float(AtRadius[element[i-1]-1])
mlab.points3d(xp,yp,zp, color=AtColor[element[i-1]-1], mode='sphere',
scale_factor=AtRadii, scale_mode='none')
""" Draw connecting lines"""
for j in range(i,NCenter):
xp_c, yp_c, zp_c = AtPos[j][0], AtPos[j][1], AtPos[j][2]
xp_in, yp_in, zp_in = float(Geomlst[i-1][0]), float(Geomlst[i-1][1]), float(Geomlst[i-1][2])
xpc_in, ypc_in, zpc_in = float(Geomlst[j][0]), float(Geomlst[j][1]), float(Geomlst[j][2])
if dist_btn_pts(xp_in, yp_in, zp_in, xpc_in, ypc_in, zpc_in) < BondMax:
mlab.plot3d([xp,xp_c], [yp,yp_c], [zp,zp_c], color=(1.0,1.0,1.0), tube_radius=0.005)
我尝试使用x,y和z的最小值更改isosurface中的extent
,但isosurface变得扭曲 - 不确定原因 - )任何帮助都将受到高度赞赏。
谢谢!