Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

delaunayTriangulation

二维和三维 Delaunay 三角剖分

说明

使用 delaunayTriangulation 对象可以基于一组点创建二维或三维 Delaunay 三角剖分。对于二维数据,您也可以指定边约束。

您可以对 delaunayTriangulation 指定各种拓扑和几何查询,包括任何 triangulation 查询。例如,定位包含特定点的面,查找凸包的顶点,或者计算 Voronoi 图。

创建对象

要创建 delaunayTriangulation 对象,请使用 delaunayTriangulation 函数,并在输入参数中定义三角剖分点和约束边。

描述

示例

DT = delaunayTriangulation(P) 基于 P 中的点创建 Delaunay 三角剖分。矩阵 P 包含 2 列或 3 列,具体取决于点是位于二维空间还是三维空间内。

DT = delaunayTriangulation(P,C) 在矩阵 C 中为 P 中的二维点指定边约束。C 的每一行定义一条约束边的开始和结束顶点 ID。顶点 ID 是属性 DT.Points 中对应顶点的行号。

DT = delaunayTriangulation(x,y) 基于列向量 xy 中的点坐标创建二维 Delaunay 三角剖分。

DT = delaunayTriangulation(x,y,C) 在矩阵 C 中指定边约束。

示例

DT = delaunayTriangulation(x,y,z) 基于列向量 xyz 中的点坐标创建三维 Delaunay 三角剖分。

DT = delaunayTriangulation() 创建一个空的 Delaunay 三角剖分。

输入参数

全部展开

点,以矩阵形式指定,矩阵的列对应于三角剖分点的 x 坐标、y 坐标和(可能的)z 坐标。P 的行号是三角剖分中的顶点 ID。

三角剖分点的 x 坐标,指定为列向量。

三角剖分点的 y 坐标,指定为列向量。

三角剖分点的 z 坐标,指定为列向量。

约束边的顶点 ID,指定为 2 列矩阵。C 坐标每一行对应一个约束边并包含两个 ID:

  • C(j,1) 是边缘开始处的顶点的 ID。

  • C(j,2) 是边缘结束处的顶点的 ID。

只能为二维三角剖分指定边约束。

属性

全部展开

三角剖分内的点,以具有下列特征的矩阵的形式表示:

  • DT.Points 中的每行包含顶点坐标。

  • DT.Points 的每个行号是一个顶点 ID。

三角剖分连接列表,以具有下列特征的矩阵的形式表示:

  • DT.ConnectivityList 中的每个元素是顶点 ID。

  • 每行代表三角剖分中的一个三角形或四面体。

  • DT.ConnectivityList 的每个行号是一个三角形或四面体 ID。

约束边,以由顶点 ID 组成的 2 列矩阵的形式表示。DT.Constraints 坐标每一行对应一个约束边并包含两个 ID:

  • DT.Constraints(j,1) 是边缘开始处的顶点的 ID。

  • DT.Constraints(j,2) 是边缘结束处的顶点的 ID。

当三角剖分没有约束边时,DT.Constraints 是一个空矩阵。

对象函数

convexHullDelaunay 三角剖分的凸包
isInterior Delaunay 三角剖分内的查询点
voronoiDiagramDelaunay 三角剖分的 Voronoi 图
barycentricToCartesian将重心坐标转换为笛卡尔坐标
cartesianToBarycentric将坐标从笛卡尔坐标转换为重心坐标
circumcenter三角形或四面体的外心
edgeAttachments连接到指定边缘的三角形或四面体
edges三角剖分边缘
faceNormal三角剖分单位法向量
featureEdges曲面三角剖分的锐边
freeBoundary自由边界面
incenter三角剖分元素的内心
isConnected测试两个顶点是否通过一条边相连接
nearestNeighbor最靠近指定点的顶点
neighbors三角形或四面体的相邻对象
pointLocation包围点的三角形或四面体
size三角剖分连接列表的大小
vertexAttachments连接到顶点的三角形或四面体
vertexNormal三角剖分顶点法向

示例

全部折叠

为 30 个随机点创建二维 delaunayTriangulation 对象。

rng default;
P = rand([30 2]);
DT = delaunayTriangulation(P)
DT = 
  delaunayTriangulation with properties:

              Points: [30x2 double]
    ConnectivityList: [48x3 double]
         Constraints: []

计算每个三角形的中心点,并绘制带有中心点的三角剖分。

IC = incenter(DT);
triplot(DT)
hold on
plot(IC(:,1),IC(:,2),'*r')

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers

为 30 个随机点创建三维 delaunayTriangulation 对象。

rng default;
x = rand([30 1]);
y = rand([30 1]);
z = rand([30 1]);
DT = delaunayTriangulation(x,y,z)
DT = 
  delaunayTriangulation with properties:

              Points: [30x3 double]
    ConnectivityList: [102x4 double]
         Constraints: []

绘制该三角剖分。

tetramesh(DT,'FaceAlpha',0.3);

Figure contains an axes object. The axes object contains 102 objects of type patch.

计算并绘制三角剖分的凸包。

[K,v] = convexHull(DT);
trisurf(K,DT.Points(:,1),DT.Points(:,2),DT.Points(:,3))

Figure contains an axes object. The axes object contains an object of type patch.

详细信息

全部展开

提示

  • 当边界约束相交或重叠时,delaunayTriangulation 会产生不正确或不一致的结果。为了避免这种行为,请使用能够构成一个或多个不相交、不重叠的闭合边界的约束。

扩展功能

版本历史记录

在 R2013a 中推出