Python TVTK 標量數據可視化與矢量數據可視化,空間輪廓線可視化

Python數據可視化分爲算法

標量可視化,矢量可視化,輪廓線可視化
  標量又稱無向量,只有大小沒有方向,運算遵循代數運算法則好比質量,密度,溫度,體積,時間
  矢量又稱向量,它是由大小,方向共同肯定的量,運算時遵循幾何運算法則,如速度,加速度,力,磁場強度,電場強度等shell

#實例1標量數據可視化
'''
使用等值面對標量場進行可視化(體繪製[三維空間數據場]經常使用手段)
等值面:標量場中標量值相等的曲面,相似地圖中的等高線
  tvtk.ContourFilter等值面過濾器,用來得到等值面,
  它是由vtkObject<--vtkAlogorithm<--vtkPolyDataAlgorithm繼承獲得的一個類
兩個方法
  generate_values()設定n條等值線的值,通常用於從新繪製等值線
  set_value()設定一條等值線的值,通常用於覆蓋某條等值線或者新增長一條等值線api

from tvtk.api import tvtk
from tvtkfunc import ivtk_scene,event_loop
#讀入plot3D數據
plot3d=tvtk.MultiBlockPLOT3DReader(
        xyz_file_name="combxyz.bin",#網格文件
        q_file_name="combq.bin",#空氣動力學結果文件
        scalar_function_number=100,#設置標量數據數量
        vector_function_number=200#設置矢量數據數量
        )
plot3d.update()
grid = plot3d.output.get_block(0)#獲取讀入的數據集
con = tvtk.ContourFilter()#建立等值面對象
con.set_input_data(grid)#將網格與其進行綁定
#範圍由數組Scalars.range決定,顏色也由scalars決定
con.generate_values(10,grid.point_data.scalars.range)#建立10個等值面
#默認映射表:最小值爲紅色,最大值爲藍色
#對映射器進行構造
m=tvtk.PolyDataMapper(scalar_range=grid.point_data.scalars.range,input_connection=con.output_port)
#對標量行爲屬性進行賦值,設置成新增長的數組的取值範圍
a=tvtk.Actor(mapper=m)
#因爲這十個等值面會相互嵌套,爲觀察等值面內部結構,修改Actor對象透明度爲0.5
a.property.opacity=0.5
#繪製交互窗口
win=ivtk_scene(a)
win.scene.isometric_view()
event_loop()

generate_values是建立等值面的函數,它能夠同時設定n條等值線的值。
嘗試更改generate_values之中的n值以後顏色改變。可使用set_value方法設置每一個等值面的值,它的第一個參數指定了第幾個等值面,第二個參數指定了等值面的值。
運行效果是很漂亮的,經過設置不一樣的透明度會出現不一樣的效果。數組

矢量數據可視化
用箭頭表示矢量數據場的數據,
  箭頭的大小能夠表示標量信息,
  箭頭的方向能夠表示矢量數據的方向
爲了在矢量數據的網格處放置箭頭符號,使用tvtk庫提供的Glyph3D方法
能夠產生放縮,着色和具備方向的符號
vtkObject<--vtkAlgorithm<--vtkPolyDataAlgorithm<--vtkGly3D
能夠採用降維的方法下降數據密度
可使用tvtk.MaskPoints()對數據進行降採樣
vtkObject<--vtkAlgorithm<--vtkPolyDataAlgorithm<--vtkMaskPointsapp

from tvtk.api import tvtk
from tvtkfunc import ivtk_scene,event_loop
#讀入plot3D數據
plot3d=tvtk.MultiBlockPLOT3DReader(
        xyz_file_name="combxyz.bin",#網格文件
        q_file_name="combq.bin",#空氣動力學結果文件
        scalar_function_number=100,#設置標量數據數量
        vector_function_number=200#設置矢量數據數量
        )
plot3d.update()
grid = plot3d.output.get_block(0)#獲取讀入的數據集(StructureGrid)
#對數據集中的數據進行隨機選取,每50個點選擇一個點
mask = tvtk.MaskPoints(random_mode = True,on_ratio = 50)#爲數據進行了降採樣
#每50個點選擇一個點,爲數據進行了降採樣。爲了觀察效果能夠在shell中進行輸出降採樣的效果
mask.set_input_data(grid)#將grid與musk相連
#建立表示箭頭的PolyData數據集
glyph_source = tvtk.ArrowSource()#ArrowSource能夠改爲ConeSource()出來的箭頭變成圓錐,scale_factor=2設置防縮係數
#在Mask採樣後的PolyData數據集每一個點上放置一個箭頭
#箭頭的方向、長度和顏色因爲點對應的矢量和標量數據決定
#在本例中箭頭的方向表示速度的方向,大小和顏色表示密度
#箭頭越大,該點標量值越大。箭頭的顏色表表示標量值的大小
#紅色對應的標量值越小,藍色對應的標量值越大
glyph=tvtk.Glyph3D(input_connection=mask.output_port,scale_factor=4)#4表示符號的共同放縮係數
#tvtk的可視化技術,它輸入數據的每一個點都被拷貝一個符號。
#符號自己是經過Glyph3D的filter的第二個輸入函數來接收vtkPolyData的類型數據
#而後經過ArrowSource在每一個點上放置一個箭頭
glyph.set_source_connection(glyph_source.output_port)
m=tvtk.PolyDataMapper(scalar_range=grid.point_data.scalars.range,input_connection=glyph.output_port)
a=tvtk.Actor(mapper=m)
#交互窗口繪製
win=ivtk_scene(a)
win.scene.isometric_view()
event_loop()

運行效果以下,能夠說是仿真版的西北風本風了哇咔咔咔dom

按照註釋的方法換成圓錐是什麼效果呢?函數

哈哈哈小圓錐萌萌噠~若是我再皮一下換成立方體呢?oop

居然莫名地好看。。spa

降採樣技術是挺重要的,要不可能根本出不來scala

可使用tvtk.MaskPoints()對數據進行降採樣。能夠經過Shell查看降採樣以前的數據個數和降採樣以後的數據個數

相差仍是多的

空間輪廓線可視化
針對載入的流體數據計算其空間輪廓線並進行三維可視化
使用tvtk.StructuredGridOutlineFilter()來實現PoluData對象的外邊框計算
該類也是繼承自
vtkObject<--vtkAlgorithm<--vtkPolyDataAlgorithm<--vtkStructuredGridOutlineFilter

from tvtk.api import tvtk
from tvtk.common import configure_input
from tvtkfunc import ivtk_scene,event_loop
#讀入plot3D數據
plot3d=tvtk.MultiBlockPLOT3DReader(
        xyz_file_name="combxyz.bin",#網格文件
        q_file_name="combq.bin",#空氣動力學結果文件
        scalar_function_number=100,#設置標量數據數量
        vector_function_number=200#設置矢量數據數量
        )
plot3d.update()#讓plot3D計算出其輸出數據
grid = plot3d.output.get_block(0)#獲取讀入的數據集(StructureGrid)
outline = tvtk.StructuredGridOutlineFilter()#計算表示外邊框(輪廓)的PolyData對象
configure_input(outline,grid)#調用將外框計算與數據集產生關聯
#兩個參數:一個是外框PolyData對象一個是流體數據grid
m = tvtk.PolyDataMapper(input_connection=outline.output_port)

a = tvtk.Actor(mapper=m)#建立一個Action實體Actor
a.property.color= 0.3, 0.3, 0.3
#窗口繪製
win = ivtk_scene(a)

運行結果就是當前文件的輪廓線

相關文章
相關標籤/搜索