Delaunay-Triangulation

本文最后更新于:2025年5月30日 凌晨

Delaunay 三角形化

Delaunay三角形化,也叫Delaunay三角剖分,是一种三角剖分算法,它的作用是把一个平面上的点集,按照一定的规则,分成若干个三角形。这些三角形有以下特点:

  • 这些三角形互不重叠
  • 这些三角形可以覆盖整个平面
  • 每个点均不位于不包含该点的三角形的外接圆内(即:在某个三角形的外接圆内,只包含在外接圆上的三个点,不包含其他点)

Delaunay 三角形化的优点:

  • 最小角的最大化(所形成的最小角是所有连接方式形成的最小角中的最大者)
  • 生成的三角形边长的均匀性最好,最接近正三角形

Delaunay 三角形化方法

如上图所示的求解区域为例,1~5是边界点,6为内部点,其初始化 Delaunay 三角形的过程如下:

  1. 包围该求解区域的各边界点做一个辅助正四边形及两个三角形 790\triangle{790}789\triangle{789},显然这两个三角形为 Delaunay 三角形;
  2. 首先考虑节点1,它位于790\triangle{790}789\triangle{789}的外接圆内;
  3. 消去公共线79,连接点1与四个顶点(0,7,8,9);
  4. 考虑点2,它位于178\triangle{178}189\triangle{189}的外接圆内;
  5. 消去公共线18,连接点2与四个顶点(1,7,8,9);
  6. 采用同样的方法依次考虑点3、4、5,最后形成图(f)所示情况,注意不一定位于两个外接圆内,可能更多,即公共线也更多

  1. 删除所有重心不在求解区域的三角形得到图(g)所示的初始化 Delaunay 三角形;
  2. 由于点6为内部点,它位于145\triangle{145}142\triangle{142}234\triangle{234} 外接圆内,因此需要消去公共线14、24,连接点6与五个顶点(1,2,3,4,5);

如何向求解区域内设点

为了能方便控制区域内点附近网格的疏密,引入两个几何参数

  1. 长度标尺,长度标尺的大小代表边界上网格疏密的程度,网格点越稠密的地方,长度标尺越小,网格点越稀疏的地方,长度标尺越大;
  2. 三角形外接圆无量纲半径,判断三角形偏离正三角形的严重程度,R(k)R(k)越大偏离越严重,首先应该往R(k)R(k)较大的三角形中添加点以改善网格质量;

长度标尺

长度标尺是赋予网格点的一个几何参数

边界网格点的长度标尺定义为:该点到边界上相邻两个边界网格点的距离的平均值的 3/2\sqrt{3}/2 倍;如点1的长度标尺为:(点1到点2的距离 + 点1到点5的距离)/2 * 3/2\sqrt{3}/2

内部网格点的长度标尺采用下列倒数原则,由边界网格点的长度标尺插值而得;设Q点是要插入到145\triangle{145}中的一点,则:

L(Q)=L(1)/l1+L(4)/l4+L(5)/l51/l1+1/l4+1/l5L(Q) = \frac{L(1)/l_1 + L(4)/l_4 + L(5)/l_5}{1/l_1 + 1/l_4 + 1/l_5}

式中,L(1)L(1)L(4)L(4)L(5)L(5) 分别为点1,点4,点5的长度标尺,l1l_1, l4l_4, l5l_5 分别为点Q到点1,点4,点5的距离;

三角形外接圆无量纲半径

设任意一个 Delaunay 三角形为 k\triangle{k},其外接圆的半径为 r(k)r(k),其外接圆的圆心长度标尺为 L(k)L(k),则其外接圆无量纲半径 R(k)R(k) 为:

R(k)=r(k)L(k)R(k) = \frac{r(k)}{L(k)}

正三角形的外接圆无量纲半径最小,值为2/3

步骤

  1. 计算所有已生成的 Delaunay 三角形的外接圆圆心的长度标尺 L(k)L(k) 以及外接圆半径 r(k)r(k)
  2. 计算所有三角形的外接圆无量纲半径 R(k)R(k)
  3. 对所有现存三角形按 R(k)R(k) 从大到小排序;
  4. R(k)R(k) 最大的三角形的外接圆圆心处添加新的点Q;
  5. 利用 Delaunay 三角形化方法,生成一组新的 Delaunay 三角形;
  6. 返回第一步,重复加点动作,直到满足要求;

Delaunay-Triangulation
http://example.com/posts/Delaunay-Triangulation/
作者
祭零小白
发布于
2025年4月18日
许可协议