如何使用mayavi绘制具有相同比例和原点的等值面和二维图形?

2024-04-23 07:58:47 发布

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

我使用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曲面内创建一个图,表示关于isosurface的一些几何信息,为此我使用了一个先前定义的函数geom_macro(ax),只需键入以下命令即可调用它:

^{pr2}$

但是我得到的图虽然显示了isosurface的一个很好的视图,但是它有一个几乎看不见的geom_macro()函数的图,它不仅在大小上与iso曲面没有任何可比性,而且处于“偏离中心”的位置(并且具有不同的x,y,z方向)。如果我把这两个物体分别画出来,我就能得到它们的漂亮图形。
为了完成我所拥有的图片,定义函数(geom_macro())的最后一部分如下(AtPos和{}包含我正在绘制的内容的(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的最小值来改变等值面中的extent,但是等值面会变形-不知道为什么-)任何帮助都会非常感谢。 谢谢您!在


Tags: 函数insrcpipeline定义isofloatzp