My favorites | Sign in
Project Home Downloads Wiki Issues Source
Checkout   Browse   Changes    
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

探索向量场
-------------------------

在此例中,我们从标量场的梯度(gradient)中产生向量场,然后交互地查看。此例介绍怎样交互地进行类似前面例子的操作,例如使用过滤器(filter)和模块(module)。前面的例子使用 `numpy`进行大多数操作,这一步则需要对 Mayavi 和 VTK 过滤器有更多的了解。与之对应的益处是可以交互地进行可视化。

首先,我们生成与前面例子相同的标量场。打开 Mayavi,在 Python 命令行内输入下面的代码::

from enthought.mayavi import mlab
import numpy as np

def V(x, y, z):
""" A 3D sinusoidal lattice with a parabolic confinement. """
return np.cos(10*x) + np.cos(10*y) + np.cos(10*z) + 2*(x**2 + y**2 + z**2)
X, Y, Z = np.mgrid[-2:2:100j, -2:2:100j, -2:2:100j]
mlab.contour3d(X, Y, Z, V)

像前面的例子一样,可以改变调色板(color map)和在等值面中选定的数值。

为了使用标量场梯度生成向量场,我们将使用`CellDerivative`滤波器。此滤波器可获得单元(也就是点之间,请参考\ :ref:`data-structures-used-by-mayavi`)内数据的微分。首先使用`PointToCellData`滤波器对单元内各点进行插值,然后使用`CellDerivatives`滤波器,接着使用`CellToPointData`滤波器重新获得点数据。

使用`VectorCutPlane`模块可以可视化向量场。生成的标量数据太大,我们可以在`Glyph`标签(以及在此标签内的`Glyph`标签)将缩放比例(scale factor)减少为0.2。向量场还是太密集,可以在`Masking`标签打开遮蔽(masking)功能,将`on ratio`设为6 (one arrow out of 6 is
masked)并关闭随机模式(random mode)。

.. image:: example_vector_cut_plane.jpg
:scale: 50


为了获得更漂亮的颜色,可以改变向量场的调色板:在`VectorCutPlane`上面的`Colors and legend`节点,找到**in the VectorLUT**标签,选择查找表,那里有向量和标量数据的不同调色板。

不像之前的例子,我们可以在对话框中试试各种参数,例如遮蔽,或在`Glyph`标签选择`color_by_scalar`来显示势值(the value of the potential)。我们也可以拖动显示向量的剖面。

既然有了3D向量场,可以使用Mayavi集成(integrate)其中一个粒子的轨迹。为此,我们可以使用streamline模块。此模块显示起始于种子(seed)表面顶点的轨迹。选择`Point Widget`作为种子(在`Seed`标签),可以在3D场景中拖动种子点。这使我们可以在产生于初始标量场的势位中探索轨迹。这里,所有的轨迹终止于局部极小势位。可以移动种子点,使我们可以看到每个点将陷入的极小值之处,换句话说,每个局部极小的吸引盆(basin of attraction)。

.. image:: example_streamline.jpg

Change log

r15 by esnmlt on Jul 11, 2009   Diff
example_exploring_a_vector_field.rst
finished
Go to: 
Project members, sign in to write a code review

Older revisions

r4 by esnmlt on Feb 10, 2009   Diff
Initialize documents in English
All revisions of this file

File info

Size: 2836 bytes, 36 lines
Powered by Google Project Hosting