在mlab / mayavi / python中设置并行预期

ano*_*n01 5 python 3d matplotlib mayavi mayavi.mlab

我在python中有一个代码可以在python中渲染一些球形,如下所示:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import random
import mayavi
from mayavi import mlab

N = 4;
diams = .4*np.ones([N]);
xvals = np.arange(N);
yvals = np.zeros(N);
zvals = np.zeros(N);
pts = mlab.points3d(xvals, yvals, zvals, diams, scale_factor=1,transparent=True)

mlab.show()
Run Code Online (Sandbox Code Playgroud)

该图的默认视图会根据摄影机位置(较小的球体较小)增加失真。我想通过一些命令将其设置为平行投影(其他球体大小相同),以便它自动呈现。

我没有找到Google或文档的直接解决方案。谢谢!

Joe*_*ton 5

尝试设置fig.scene.parallel_projection = Truemlab.gcf().scene.parallel_projection = True根据您的情况。

举个简单的例子,进行比较(放大以放大差异):

import numpy as np
from mayavi import mlab

np.random.seed(1977)
x, y, z = np.random.random((3, 10))

mlab.points3d(x, y, z)
mlab.show()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

当我们设置正交投影时:

import numpy as np
from mayavi import mlab

np.random.seed(1977)
x, y, z = np.random.random((3, 10))

mlab.points3d(x, y, z)
mlab.gcf().scene.parallel_projection = True
mlab.show()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


Evg*_*eev 5

除了已接受的答案之外,我发现当我们使用该figure.scene.parallel_projection = True模式时,返回的参数mlab.view()不再足以完整地描述相机视图。还有另一个参数起作用:

\n\n
figure.scene.camera.parallel_scale\n
Run Code Online (Sandbox Code Playgroud)\n\n

因此,如果希望每次都将视图设置为相同,则必须进行 (1) 设置mlab.view(..)和 (2) 设置figure.scene.camera.parallel_scale = 5.0

\n\n
\n\n

(背景故事:我的脚本绘制了一个曲面,然后我仅使用 来设置相机mlab.view(..),并发现渲染的图像缩放不一致。原因是:当我绘制时,TVTK 会更新相机的参数,因此如果绘图不相同。这些参数包括parallel_scale,它影响投影 \xe2\x80\x94 它基本上是缩放 \xe2\x80\x94 但独立于mlab.view()。)

\n