等值面
等值面是空间中的一张曲面,在该曲面上函数 F ( x , y , z ) F(x,y,z) F(x,y,z)的值等于某一给定值。准确地讲,是指在某一网格空间中,假若每一结点保存着三变量函数 F ( x , y , z ) F(x,y,z) F(x,y,z),而且网格单元在 x , y , z x,y,z x,y,z方向上的连续采样值为 F ( x , y , z ) F(x,y,z) F(x,y,z),则对于某一给定值 F i F_{i} Fi,等值面是由所有满足 S = { ( x , y , z ) ∣ F ( x , y , z ) = F i } S =\left \{ (x,y,z)|F(x,y,z) = F_{i}\right \} S={(x,y,z)∣F(x,y,z)=Fi}的曲线。
按照此严格定义下得到的等值面表达式如下:
F
(
x
,
y
,
z
)
=
a
0
+
a
1
x
+
a
2
y
+
a
3
z
a
4
x
y
+
a
5
y
z
+
a
6
x
z
+
a
7
x
y
z
F(x,y,z)=a_{0}+a_{1}x+a_{2}y+a_{3}za_{4}xy+a_{5}yz+a_{6}xz+a_{7}xyz
F(x,y,z)=a0+a1x+a2y+a3za4xy+a5yz+a6xz+a7xyz
可以看出等值面是三次代数曲面,提取过程复杂而且不利于显示。为了简化等值面的提取,W.ELorenson和H.E.CIine在1987年提取了一种等值面的简化提取方法,该方法首先找到等值面经过的六面体网格,求出该六面体与等值面的交点,将这些交点按照一定的拓扑连接关系连接起来,作为等值面在该六面体网格中的近似表示。
1. 找到等值面经过的六面体网格
前面我们提到过,我们有很多的已知采样点,并且知道这些点在空间中的空间场值,现在我们将空间分为很多个小格子,每个小格子都有8个顶点,我们通过计算8个顶点周围(范围与六面体的大小相关)的采样点,近似计算出8个顶点的空间场值(加权评价等方法)。我们就可以对六面体做以下分类,我们分析一下以下情况:
八个顶点都没有空间场值,0等值面不经过或者经过但是没有采样,我们没有办法进行近似,所以不处理。
八个顶点都有或部分有空间场值,当空间场值都是正值或者都是负值时,说明0等值面,不在六面体内。
当六面体内的的顶点的空间场值有正有负时,则说明有0等直面穿过六面体。我们需要从众多六面体内,筛选出这样的六面体。
2. 求六面体边与0等值面的交点
因为六面体有8个顶点,8个顶点的状态就有
2
8
=
256
2^8 = 256
28=256中分布状态,但是由于六面体是有对称性的,我们通过对称性,可以简化这些状态至15种状态。我们看一下15中状态:
Marching Cubes
(1)将原始数据经过预处理之后,读入特定的数组中;
(2)从网格数据体中提取一个单元体,成为当前单元体"同时获取该单元体的所有信息,例如8个顶点的值,坐标位置等;
(3)将当前单元体8个顶点的函数值与给定等值面值C进行比较,得到该单元体的状态表;
(4)根据当前单元体的状态表索引,找出与等值面相交的单元体棱边,并采用线性插值的方法,计算出各个交点的位置坐标;
(5)利用中心差分法,求出当前单元体8个顶点的法向量,在采用线性插值的方法,得到三角面片各个顶点的法向
(6)根据各个三角面片顶点的坐标,顶点法向量进行等值面图象的绘制.