最近在中国大学MOOC网上学习python科学计算三维可视化相关知识,记录下来,以供参考。
科学可视化基础
科学计算的可视化方法
- 二维标量数据场
1.1 颜色映射方法
1.2 等值线方法
1.3 立体图法和层次分割法 - 三维标量数据场
2.1 面绘制方法(surface rendering)
2.2 体绘制方法(volume rendering) - 矢量数据场
3.1 直接法
3.2流线法(stream line)
TVTK库的安装
VTK-7.1.1-cp36-cp36m-win_amd64.whl
numpy-1.12.1+mkl-cp36-cp36m-win_amd64.whl
traits-4.6.0-cp36-cp36m-win_amd64.whl
mayavi-4.5.0+vtk71-cp36-cp36m-win_amd64.whl
PyQt4-4.11.4-cp36-cp36m-win_amd64.whl
TVTK库的安装小测
>>> from tvtk.api import tvtk
>>> s = tvtk.CubeSource(x_length = 1.0,y_length = 2.0,z_length = 3.0)
>>> print(s)
vtkCubeSource (0000020A22196F60)
Debug: Off
Modified Time: 96
Reference Count: 2
Registered Events:
Registered Observers:
vtkObserver (0000020A25B90240)
Event: 33
EventName: ModifiedEvent
Command: 0000020A258E4CD0
Priority: 0
Tag: 1
Executive: 0000020A25BA0170
ErrorCode: No error
Information: 0000020A25C6E570
AbortExecute: Off
Progress: 0
Progress Text: (None)
X Length: 1
Y Length: 2
Z Length: 3
Center: (0, 0, 0)
Output Points Precision: 0
创建一个基本三维对象
s = tvtk.CubeSource(x_length=1.0, y_length=2.0, z_length=3.0)
CubeSource对象的属性
属性 | 说明 |
---|---|
s.x_length | 长方体对象在X轴方向的长度 |
s.y_length | 长方体对象在y轴方向的长度 |
s.z_length | 长方体对象在z轴方向的长度 |
s.center | 长方体对象所在坐标系的原点 |
s. output_points_precision | 长方体对象的精度 |
CubeSource对象的方法
VTK方法 | Tvtk | 说明 |
---|---|---|
Set/GetXLength() | x_length | 设置/获取长方体对象在X轴方向的长度 |
Set/GetYLength() | y_length | 设置/获取长方体对象在Y轴方向的长度 |
Set/GetZLength() | z_length | 设置/获取长方体对象在Z轴方向的长度 |
Set/GetCenter() | center | 设置/获取长方体对象所在坐标系的原点 |
… | … |
Tvtk库的基本三维对象
三维对象 | 说明 |
---|---|
CubeSource | 立方体三维对象数据源 |
ConeSource | 圆锥三维对象数据源 |
CylinderSource | 圆柱三维对象数据源 |
ArcSource | 圆弧三维对象数据源 |
ArrowSource | 箭头三维对象数据源 |
创建一个圆锥数据源
>>> s = tvtk.ConeSource(height = 3.0,radius = 1.0,resolution = 36) #高度、底面圆半径。底面圆分辨率
>>> s.height
3.0
>>> s.radius
1.0
>>> s.resolution
36
>>> s.center
array([ 0., 0., 0.])
>>> print(s)
vtkConeSource (0000020A25B7FE10)
Debug: Off
Modified Time: 133
Reference Count: 2
Registered Events:
Registered Observers:
vtkObserver (0000020A25B91260)
Event: 33
EventName: ModifiedEvent
Command: 0000020A258E4490
Priority: 0
Tag: 1
Executive: 0000020A25BA0F80
ErrorCode: No error
Information: 0000020A25C6F240
AbortExecute: Off
Progress: 0
Progress Text: (None)
Resolution: 36
Height: 3
Radius: 1
Capping: On
Center: (0, 0, 0)
Direction: (1, 0, 0)
Output Points Precision: 0
TVTK库显示一个三维对象
from tvtk.api import tvtk
# 创建一个长方体数据源,并且同时设置其长宽高
s = tvtk.CubeSource(x_length=1.0, y_length=2.0, z_length=3.0)
# 使用PolyDataMapper将数据转换为图形数据
m = tvtk.PolyDataMapper(input_connection=s.output_port)
# 创建一个Actor
a = tvtk.Actor(mapper=m)
# 创建一个Renderer,将Actor添加进去
r = tvtk.Renderer(background=(0, 0, 0))
r.add_actor(a)
# 创建一个RenderWindow(窗口),将Renderer添加进去
w = tvtk.RenderWindow(size=(300,300))
w.add_renderer(r)
# 创建一个RenderWindowInteractor(窗口的交互工具)
i = tvtk.RenderWindowInteractor(render_window=w)
# 开启交互
i.initialize()
i.start()
原始数据转换为屏幕上图像,TVTK对象共同协调完成:
tvtk.CubeSource
tvtk.PolyDataMapper
tvtk.Actor
tvtk.Renderer
tvtk.RenderWindow
tvtk.RenderWindowInteractor
在TVTK中,这种对象之间协调完成工作的过程被称作管线(Pipeline)。