VTK知识学习(16)- 基本数据结构之单元类型
1、前言
数据集由一个或多个单元组成,图列出了VTK支持的线性和非线性类型的单元。
一系列有序的点按指定类型连接所定义的结构就是单元(Cel),单元是VTK可视化系统的基础。
这些顺序连接的点定义了单元的拓扑结构,而点的坐标定义了单元的几何结构。
单元就是一个有顺序的点集:G,={p,P.…p},其中p€P,P就是该有序的点集。
单元的类型决定了点集里点的顺序(或者说单元的拓扑);
而定义单元的点的个数就是该单元的大小(Size)。
单元的拓扑维度除了三维之外,还可以是零维、一维、二维等,如零维的顶点(Vertex)一维的线(Line)以及二维的三角形(Triangle)。
单元可以是基本类型或者基本类型的组合。
基本类型是指不可再分的单元,组合类型是由基本类型组合而成的。比如,三角形条带(TriangleStrip)是由多个三角形组成的即三角形条带可以分解成多个三角形,而三角形是二维的基本单元类型。所以,对于单元的类型而言,理论上由不同类型的单元可以组合成无数种,VTK应用程序需要用到哪些类型的单元应该根据具体的要求。
总的来说,VTK里的单元类型分为线性和非线性,如图所示。
2、各种单元类型
1)线性的Cell类型
a) Vertex b) Polyvertex c) Line d) Polyline(n lines)e) Triangle f) Triangle strip(n triangles)g) Quadrilateral h) Pixeli) Polygon(n points)j) Tetrahedron k) Hexahedron l) Voxel m) Wedge n) Pyramid o) Pentagonal Prism p) Hexagonal Prism
a)顶点 b)多顶点 c)多边形 d)折线(n条线) e)三角形 f)三角形带(n个三角形) g)四边形 h)像素
i)多边形(n个点) j)四面体 k)六面体 1)体素 m)楔形 n)棱锥 o)五边形棱柱 p)六边形棱柱
2)非线性的Cell类型
a) Quadratic Edge b) Quadratic 'Triangle c) Quadratic Linera Quad d) Quadratic Quad e) Bi- Quadratic Quad f) QuadraticTetrahedron g) Quadratic Pyramid h) Quadratic Hexahedron i) Bi- Quadratic Hexahedronj) Tri- Quadratic Hexahedronk)Quadratic Linear Wedge l)Quadratic Wedge m) Bi-Quadratic Wedge
a)二次边b)二次三角形c)二次线四边形d)二次四边形e)二次四次四边形f)二次四面体g)二次金字塔h)二次六面体i)二次六面体j)三次六面体形k)二次线性楔形l)二次楔形m)二次二次楔形
3、线性单元
1)概述
单元类型的线性与非线性的划分主要是以插值函数为依据的,对于线性单元,采用的是线性或者常量插值函数。另外,单元里的任意一条边都是由两个点连接定义的。VTK里单元的类型定义在
2) 分类
vtkCellType.h 文件里,线性的单元类型如下:
1)VTK VERTEX。顶点,由一个点定义,是零维的基本类型。
2)VTKPOLY VERTEX。多顶点,多个顶点组合而成,是零维的组合单元,其定义不受顶点顺序的限制。
3)VTK LINE。直线,一维的基本类型,由两个点定义,方向是从第一个点指向第二个点。
4)VTK POLY LINE。折线,由一个或多个线段组合而成,一维的类型。由n+1个有序的点连接定义的,n表示折线的线段条数,每两个点(,i+1)定义一条线段。
5)VTK TRIANGLE。三角形,二维的基本类型,由三个点按逆时针的方向连接定义,点的连接方向和表面法向量符合右手法则,即右手大拇指外的手指沿着点的方向弯曲,大拇指所指向的方向就是表面法向量。
6)VTK TRIANGLE STRIP。三角形条带,由一个或多个三角形组合而成,二维类型。由n+2个有序的点连接定义的,n表示三角形条带里三角形的个数,定义三角形条带的点不需要共面。定义每个三角形的顶点顺序为(i,i+1,i+2),0≤i≤n。
7)VTK QUAD。四边形,二维的基本类型,是由共面的四个点按逆时针的方向连接定义的。四边形要求是非自交的凸多边形。利用右手法则可以得到该四边形的表面法向量。
8)VTK PIXEL。二维的基本类型,是由共面的四个点按一定的顺序连接定义的。该类型的单元与四边形的区别在拓扑结构上,Pixel类型要求相邻的两条边必须垂直,而且相对的两条边要与坐标轴平行,因此 Pixel的表面法向量也与其中的一条坐标轴平行。
9)VTK POLYGON。多边形,二维的基本类型,是由共面的三个或三个以上的点按逆时针方向的顺序连接定义的。多边形表面法向量的方向通过右手法则确定。
10)VTK TETRA。四面体,三维的基本类型,是由不共面的四个点两两连接定义的。四面体有六条边和四个面。
11)VTK HEXAHEDRON。六面体,三维的基本类型,包含六个四边形表面、12条边和8个顶点。
12)VTK VOXEL。三维的基本类型,与六面体的拓扑一样,但几何上有所区别。Voxel要求相邻的两个面必须垂直,点的连接顺序如图所示。Voxel 是六面体的特殊形式。与Pixel 类似,Voxel与三维图像体素(Voxel)的概念是不同的。
13)VTK WEDGE。楔形,三维的基本类型,由三个四边形面、两个三角形面、九条边和六个顶点构成。六个点的连接顺序如图m 所示。要求面和边不能与其他的相交,且楔形必须是凸的。
14)VTK PYRAMID。角椎体,三维的基本类型,由一个四边形面、四个三角形面、八条边和五个顶点构成。构成角椎体的点的连接顺序如图n所示。定义四边形的四个点要求是共面的,且四个点构成的四边形必须是凸的,第五个点与其他四个点不在一个面上。15)VTKPENTAGONALPRISM。五棱柱,三维的基本类型,由五个四边形面、两个五边形面、15 条边和 10顶点构成。点的连接顺序如图 0所示。五棱柱的面和边不能与其他的相交,且五棱柱必须是凸的。
16)VTK HEXAGONAL PRISM。六角柱,三维的基本类型,由六个四边形面、两个六边形面、18条边和12 个顶点构成。点的连接顺序如图p所示。六角柱的面和边不能与其他的相交,且六角柱必须是凸的。
4、非线性单元
1) 概述
在数值分析领域里,为了更精准地表达数据,采用非线性单元作为数据的基本表达结构。非线性单元可以提供更准确的插值函数,故可以获得更加理想的可视化效果。线性单元与非线性单元的不同点是在渲染和数据处理方法方面,线性单元很容易转换成线性图元,用图形库处理;而非线性单元不被图形库直接支持,必须先转换成线性单元以后,才能被图形库支持。一般的策略如下:
1)将非线性单元细分成线性单元,再把细分的结果当作线性单元来处理。
2)开发能够直接渲染或者可视化非线性单元的算法。
3)程序自定义渲染图形库的操作。
在 VTK中,主要采用第1种策略。因为一旦将非线性单元细分成线性单元,就可以用现有的处理线性单元的算法来处理非线性单元。在对非线性单元做细分操作时,VTK是采取固定细分的方法,比如,对于一条只有一个拐点的二次曲线,在拐点处增加一个点分别连接该点与曲线的两个端点,得到两条线段,用这两条线段可逼近该二次曲线。
2) 分类
VTK 里非线性单元的类型也是定义在 vtkCellType.h 文件中,非线性单元的类型如下:
1)VTK QUADRATIC EDGE。二次曲线,一维的基本类型,由三个点定义,其中前两个点分别对应曲线的端点,第三个点位于曲线的中间位置(见图3-7a),曲线的方向是由第-
个点指向第二个点。2)VTK QUADRATIC TRIANGLE。二次三角形,二维的基本类型之一,由六个点定义,其中前三个点对应三角形的三个顶点,另外三个点分别对应三条边的中点(见图中b)。3)VTK QUADRATIC LINEAR QUAD。二次线性四边形,二维的基本类型之一,由六个点定义,其中前四个点对应四边形顶点,另外两个点位于第一和第三条边的中点处(见图中c)。
4)VTK OUADRATIC OUAD。二次四边形,二维的基本类型之一,由八个点定义,其
中前四个点分别对应四个顶点,后四个点分别对应四条边的中点(见图中d)。
5)VTK BIQUADRATIC QUAD。双二次四边形,二维的基本类型之一,由九个点定义,其中前四个点分别对应四个顶点,后四个点分别对应四条边的中心,最后一个点位于该二次四边形的中心位置(见图中e)。
6)VTK QUADRATIC TETRA。二次四面体,三维的基本类型之一,由10个点定义,其中前四个点分别对应四面体的四个顶点,其余六个点分别对应六条边的中点(见图中f)。
7)VTK QUADRATIC PYRAMID。二次角锥体,三维的基本类型之一,由13个点定义,其中前五个点对应角锥体的五个顶点,其余八个点对应八条边的中点(见图中g)。
8)VTK QUADRATIC HEXAHEDRON。二次六面体,三维的基本类型之一,由20个点定义,其中前八个点对应六面体的八个顶点,其余12个点分别对应12条边的中点(见图中h)。
9)VTK BIQUADRATIC QUADRATIC HEXAHEDRON。双二次六面体,三维的基本类型之一,由 24个点定义,其中前八个点对应六面体的八个顶点,中间12个点分别对应 12条边的中点,最后四个点位于前四个面的中心位置(见图中i)。
10)VTK TRIQUADRATIC HEXAHEDRON。三次六面体,三维的基本类型之一,由27 个点定义,其中前八个点对应六面体的八个顶点,中间12个点分别对应12条边的中点,另外六个点位于六个面的中心位置,最后一个点位于六面体的中心(见图中j)。
11)VTK QUADRATIC LINEAR WEDGE。二次线性楔形体,三维的基本类型之一,由12个点定义,其中前六个点对应楔形体的六个顶点,其余六个点分别对应组成上下两个面的三角形边的中点(见图中k)。
12)VTK OUADRATIC WEDGE。二次楔形体,三维的基本类型之一,由15个点定义,其中前六个点对应楔形体的六个顶点,其余九个点分别对应九条边的中点(如图中l所示)。
13)VTK BIQUADRATIC QUADRATIC WEDGE。双二次楔形体,三维的基本类型之一,由18个点定义,其中前六个点对应楔形体的六个顶点,九个点分别对应九条边的中点,最后三个点位于每个二次曲面的中心位置(见图中m)。