1

我正在尝试绘制两个恰好在两个点接触但在其他方面分离良好的表面。根据视角的不同,这要么渲染得很好(图 1),要么使顶部表面s2(等离子,红色)遮挡下部表面s1(图 2)。我想这是由于绘制表面的顺序,所以 mayavi 只是把一个放在前面,即使在数学上它应该放在后面。我该如何解决这个问题?请注意,我希望两个表面都有不同的颜色图,因为它们代表不同的事物。非常感谢!

图 1,正确的情节 图 1,正确的情节 图2,错误的情节 图 2,错误的情节

这里是生成情节的代码。在交互式窗口中选择了视角,不确定如何获得数值。

import numpy as np
import mayavi.mlab

x,y = np.mgrid[-np.pi:np.pi:0.01, -np.pi:np.pi:0.01]

def surface1(x,y):
    return -np.sqrt((np.cos(x) + np.cos(y) - 1)**2 + np.sin(x)**2)

def surface2(x,y):
    return np.sqrt((np.cos(x) + np.cos(y) - 1)**2 + np.sin(x)**2)

s1 = mayavi.mlab.surf(x,y,surface1, colormap='viridis')
s2 = mayavi.mlab.surf(x,y,surface2, colormap='plasma')

mayavi.mlab.show()

编辑:终于发现了问题:需要指定正确的渲染后端。使用ipython3 --gui=qt解决了这个问题。因此,该问题仅在使用默认后端(无论哪个)时出现。我希望这会在某个地方更清楚地记录下来,这会为我节省很多工作。

4

0 回答 0