对于给定的点集,Delaunay三角网是连接每个点及其相邻点的线段集。可以用delaunay函数实现二维Delaunay三角剖分,该函数的语法格式为:[大谦MATLAB,dqmatlab点com]
TRI=delaunay(x,y) 对于x,y矢量定义的点,返回一个三角形集合,要求没有数据点落在任何三角形的外接圆中。m×3的矩阵TRI中的每一行定义一个这样的三角形,并包含x和y的编号。如果原始数据点在同一条直线上,或者x为空,则无法进行三角化,delaunay函数返回一个空矩阵。该函数使用Qhull算法。
TRI=delaunay(x,y,options) 指定一个字符串单元数组options,它通用delaunayn函数用在Qhull算法中。默认选项为{'Qt','Qbb','Qc'}。如果options为[],则使用默认选项。如果options为{''},则不使用选项。
可以用triplot,trisurf和trimesh等函数将delaunay函数的输出数据绘成图形。trimesh和trisurf函数主要用来绘制三角形网格图和三角形曲面图。triplot函数主要用于绘制二维三角形图。3个函数的使用如表3-1中所示。
表3-1 绘delaunay函数输出数据的图形
| 函 数 | 描 述 |
|---|---|
| triplot | 显示m×3的矩阵定义的三角形 |
| trisurf | 将m×3的矩阵TRI定义的每个三角形显示为3维空间中的曲面。对于2维数据,可以提供第3维的数据组成的矢量,例如
trisurf(TRI,x,y,zeros(size(x))) |
| trimesh | 将m×3的矩阵TRI定义的每个三角形显示为3维空间中的网格。对于2维数据,可以提供第3维的数据组成的矢量,例如
trimesh(TRI,x,y,zeros(size(x)))
除了是三维外,生成的结果与triplot的基本相同。 |
下面3个例子分别用表1-1中的3个函数绘图。
绘制10个随机点的Delaunay三角网。
>> rand('state',0);
>> x=rand(1,10);
>> y=rand(1,10);
>> TRI=delaunay(x,y);
>> triplot(TRI,x,y)
>> axis([0 1 0 1]);
>> hold on;
>> plot(x,y,'or');
>> hold off
生成图3-1。
图3-1 10个随机点的三角网
创建一个2维网格,然后通过将第3维的数据设置为0,用trisurf函数绘制3维空间中的Delaunay网。
>> [x,y]=meshgrid(1:15,1:15);
>> tri=delaunay(x,y);
>> trisurf(tri,x,y,zeros(size(x)))
生成图3-2。
图3-2 2维数据在3维空间中的Delaunay三角网
然后,用peaks函数生成15×15的矩阵,然后使用该数据生成3维空间中的Delaunay三角网。
>> z=peaks(15);
>> trisurf(tri,x,y,z)
生成图3-3。
图3-3 用peaks数据生成的Delaunay三角网
可以将相同数据用于trimesh函数来生成3维空间中的网格。
>> trimesh(tri,x,y,z)
生成图3-4。
图3-4 3维空间中的Delaunay三角网