Python科學計算三維視覺化(1) ——TVTK庫入門
阿新 • • 發佈:2019-02-07
最近在中國大學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 (0000020 A25B90240)
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)。