6.4 属性数据
屬性數據(AttributeData)是與數據集的組織結構相關聯的信息。由前面的內容可知,組織結構包括幾何結構及拓撲結構,幾何結構由點數據定義,拓撲結構由單元數據定義。因此,屬性數據通常是與數據集的點數據或者單元數據相關聯,但有時屬性數據也可能與組成單元的某些成分相關聯,如,單元數據的某條邊或者某個面等。此外也可以給整個數據集指定某個屬性數據,或者數據集里的某一組單元數據或點數據指定相應的屬性數據。
屬性數據主要用于描述數據集的屬性特征,對數據集的可視化實質上是對屬性數據的可視化,例如,根據壓力監測數據構建一個壓力場可視化數據集后,數據集中的每個數據點(幾何數據)或單元都必須有對應的屬性數據,VTK根據屬性數據設置顏色表,用不同的顏色表示不同的壓力,通過顏色的變化情況,可以直觀的分析出壓力的變化趨勢。
依據數據的性質屬性數據可分為標量數據、矢量數據、張量數據等幾大類(圖6.10)。屬性數據可以抽象為n維的數組,比如,像溫度、壓力等單值函數可以看作是1×1的數組,速度等矢量數據可以看作是3×1的數組(沿X、Y和Z三個方向的分量)。相對而言,屬性數據中的標量數據和矢量數據應用比較廣泛。
?
圖6.10屬性數據
在VTK中用vtkPointData類和vtkCellData類表達數據集屬性,它們是類vtkDataSetAttributes(vtkDataSetAttributes派生自vtkFieldData)的子類,構成數據集的每個點(或單元)和屬性數據之間存在一對一的關系,如一個數據集由N個點(或單元)構成,那么必須有N個屬性數據和這N個點(或單元)一一對應,通過點的索引號就可以對該點的屬性數據進行訪問,例如在數據集aDataSet中訪問索引號為129的點的標量值時(假設標量數據已被定義且不為空)使用如下方法:
aDataSet->GetPointData()->GetScalars()->GetScalar(129)。
l? 標量數據(Scalar)
標量數據是數據集里的每個位置具有單值的數據,它只表示數據的大小,例如溫度、壓力、密度、高度等。標量數據是最簡單也是最普遍的可視化數據。
示例VTKConceptScalars演示了VTK里是如何給點數據或者單元數據指定標量屬性數據的。從示例VTKConceptScalars可以看出,要給數據集里的點數據或者單元數據設置標量屬性數據,只要先獲取到該數據集對應的點數據或者單元數據,然后設置相應的標量屬性數據即可,即:GetPointData()->SetScalars()。
?
| 示例VTKConceptScalars |
?? 1:?int main(int, char *[])
?? 2:? {
?? 3:???//創建點集數據:包含兩個坐標點。
?? 4:???vtkSmartPointer<vtkPoints> points =vtkSmartPointer<vtkPoints>::New();
?? 5:???points->InsertNextPoint(0,0,0);
?? 6:???points->InsertNextPoint(1,0,0);
?? 7:??
?? 8:???//創建多邊形數據。
?? 9:???vtkSmartPointer<vtkPolyData> polydata =vtkSmartPointer<vtkPolyData>::New();
? 10:???polydata->SetPoints(points);
? 11:??
? 12:???//準備加入點數據的標量值,兩個標量值分別為1和2。
? 13:???vtkSmartPointer<vtkDoubleArray> weights =vtkSmartPointer<vtkDoubleArray>::New();
? 14:???weights->SetNumberOfValues(2);
? 15:???weights->SetValue(0, 1);
? 16:???weights->SetValue(1, 2);
? 17:???
? 18:???//先獲取多邊形數據的點數據指針,然后設置該點數據的標量屬性值。
? 19:???polydata->GetPointData()->SetScalars(weights);
? 20:??
? 21:???//輸出索引號為0的點的標量值。
? 22:???double weight = vtkDoubleArray::SafeDownCast(
? 23:???????????????????polydata->GetPointData()->GetScalars())->GetValue(0);
? 24:???std::cout << "double weight: " << weight <<std::endl;
? 25:??
? 26:???return 0;
? 27:? }
l? 矢量數據Vector
與物理上的矢量概念一樣,VTK的矢量數據也是指既有大小也有方向的量,三維方向上用三元組(Triple)表示為(u, v, w),如速度、應力、位移等。
除了矢量數據用三元組表示,顏色等標量數據也會用類似三元組的結構表示。比如,從第3章“顏色”一節可知,顏色可以用RGB三個分量表示,RGB分量是構成顏色標量數據的三個組分(Component),盡管顏色vtkColor也是使用vtkVector容器,但它與矢量數據是有本質區別的。
標量數據之所以稱之為標量數據,是它在數據集的幾何變換過程的不變性。比如,假設有一個矢量數據存儲在某個vtkDataSet數據集里,當使用vtkTransformFilter對該數據集作變換時,我們希望的結果是該矢量數據也隨著數據集的變換而變換;而對于RGB系統的顏色,假如把該顏色的RGB三個分量當成矢量方向的三個方向,對該數據集作變換時,顏色值也會隨著變化,對于某一點的顏色,顯然我們需要的結果是變換前后它的值應該保持不變才對。
l? 法向量Normal
法向量,是指大小恒為1的方向向量,通常用于計算投影、光照等。
l? 紋理坐標Texture Coordinate
為了使物體看起來更加真實、逼真,計算機圖形學通常采用紋理映射使得顯示的三維物體具有更好的真實感。紋理坐標可以將點從笛卡爾坐標空間映射到一維、二維或三維的紋理空間中。
l? 張量數據Tensor
張量是矢量和矩陣通過復雜的數學算法得到的,一個k階的張量可當作一個k維的表格。零階的張量是標量,一階的張量是矢量,二階的張量是紋理坐標,三階的張量是一個三維陣列,VTK只支持3×3的對稱的張量,如圖6.10所示。
==========歡迎轉載,轉載時請保留該聲明信息==========
版權歸@東靈工作室所有,更多信息請訪問東靈工作室
教程系列導航:http://blog.csdn.net/www_doling_net/article/details/8763686
================================================
總結
- 上一篇: 人群频率 | gnomAD数据库 (二)
- 下一篇: Adobe illustrator 排版