获得描述几何模型的关键矩阵gd, ns和sf后,利用它们,通过decsg函数可以将研究区域分解为最小子域,并得到一个用离散几何矩阵表示的离散几何模型。该函数的语法格式为:
dl=decsg(gd, sf, ns) 把几何描述矩阵gd描述的CSG模型分解为离散几何矩阵dl描述的离散几何模型。其他参数ns和sf在1.4.2小节有详细介绍。
dl=decsg(gd) 返回所有最小子域。
[dl, bt]=decsg(gd)和[dl, bt]=decsg(gd, sf, ns) 另外返回一个布尔表bt,该表将原区域对象和最小子域联系起来。bt中的列对应于gd中具有相同编号的列,bt中的行对应于一个最小子域编号。
离散几何矩阵dl包含decsg函数创建的最小子域表示的离散几何模型。最小子域的每条边对应于dl的一列。这里将最小子域之间的边界线称为边线段,将外部边界称为边界线段。在每个这样的列中,第1行表示边线段的类型,第2行和第3行包含起点和终点的x坐标,第4行和第5行包含起点和终点的y坐标。第6行和第7行包含左右最小子域的标签,标签可以指示由起点和终点推出的方向(对于圆和椭圆线段则按逆时针方向)。最小子域中有3种可能的边线段类型:
对于圆边线段,第1行为1。第8行和第9行包含圆心的坐标。第10行为圆的半径。
对于直线边线段,第1行为2。
对于椭圆边线段,第1行为4。第8行和第9行包含椭圆中心的坐标。第10行和第11行分别为椭圆的半轴a和b。椭圆的旋转角度被保存在第12行中。
用各列数据集成离散几何矩阵时要求各列具有相同的长度,长度不够时用0补齐。
【例3】1.4.1小节获取了几何模型的关键矩阵gd, ns和sf,在此基础上用decsg函数进行子域分解,获取离散几何矩阵dl。
>> dl = decsg(gd,sf,ns)
dl =
1 至 6 列
2.0000 2.0000 2.0000 2.0000 4.0000 4.0000
0.8717 0.8717 -0.9638 -0.9638 -0.0082 0.4342
0.8717 -0.9638 -0.9638 0.8717 0.4342 -0.0082
0.5312 -0.4589 -0.4589 0.5312 -0.1563 0.0296
-0.4589 -0.4589 0.5312 0.5312 0.0296 0.2155
0 0 0 0 0 0
1.0000 1.0000 1.0000 1.0000 1.0000 1.0000
0 0 0 0 -0.0082 -0.0082
0 0 0 0 0.0296 0.0296
0 0 0 0 0.4424 0.4424
0 0 0 0 0.1859 0.1859
0 0 0 0 0 0
7 至 8 列
4.0000 4.0000
-0.0082 -0.4506
-0.4506 -0.0082
0.2155 0.0296
0.0296 -0.1563
0 0
1.0000 1.0000
-0.0082 -0.0082
0.0296 0.0296
0.4424 0.4424
0.1859 0.1859
0 0
可见,离散几何矩阵共有8列,包含8条边线段(4条直线边线段和4条椭圆边线段)的数据。各列数据的构成方法请参考示例上面介绍的规则。
使用pdegplot函数可以用离散几何矩阵绘制几何模型的图形。将EdgeLabels和FaceLabels参数的值设置为'on',在图中显示边线段和面的标签。
>> pdegplot(dl,'EdgeLabels','on','FaceLabels','on')
绘制几何模型的图形如图4-2所示。
图4-2 几何模型的图形