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