Delaunay三角剖分算法

news2024/12/23 10:12:17

目录

  • 一. 简介
    • 1.1 三角剖分
    • 1.2 Delaunay三角剖分
  • 二. Delaunay三角剖分的相关理论
    • 2.1 Delaunay三角形和(局部)Delaunay边的概念
    • 2.2 Delaunay引理
    • 2.3 翻转边算法(flip algorithm)
    • 2.4 Delaunay三角剖分的最优性质
  • 三. Delaunay三角剖分的构造算法
    • 3.1 Lawson算法
    • 3.2 Bowyer-Watson算法
  • 四. 基于Delaunay三角剖分法的网格生成算法
    • 4.1 Delaunay平面区域网格生成算法
    • 4.2 三维模型的Delaunay三角网格生成算法

一. 简介

点集的三角剖分(Triangulation),对数值分析(比如有限元分析)以及图形学来说,都是极为重要的一项预处理技术。尤其是Delaunay三角剖分,由于其独特性,关于点集的很多种几何图都和Delaunay三角剖分相关,如Voronoi图,EMST树,Gabriel图等。Delaunay三角剖分有最大化最小角,最接近于规则化的三角网和唯一性(任意四点不能共圆)两个特性。

Delaunay三角剖分广泛应用于许多不同应用程序中的科学计算。虽然有大量的计算三角剖分的算法,但Delaunay三角剖分以其实用的几何属性广受欢迎。

1.1 三角剖分

三角剖分就是对给定的平面点集,生成三角形集合的过程。考虑平面点集P={P1,…,Pn},我们希望得到三角形集合T=在{t1,…,tm},满足:

  • 所有三角形的端点恰好构成集合P;
  • 任意两个三角形的边不相交(要么重合,要么没有交点);
  • 平面图中所有的面都是三角面,且所有三角形的合集构成P的凸包(convex hull)。

在这里插入图片描述
一般来说,给定一个点集,往往存在不止一个三角剖分。以下图为例,我们只要把第一个三角剖分中的两个相邻三角形的公共边做一次翻转,就可以得到一个新的三角剖分。
在这里插入图片描述
由于给定点集的三角剖分不唯一,我们希望从中挑选出一个“最优”的三角剖分。那么何为最优?这涉及到三角形“质量”的评定。一般在数值计算中,我们不希望三角形过于狭长,也就是说越接近等边三角形越好。以下是几种常见的质量评定标准:

  • 最小角(minimum angle):即所有三角形的内角当中最小的角;
  • 纵横比(aspect ratio):三角形最短边与最长边的比例;
  • 半径比(radius ratio):三角形内接圆半径的两倍与外接圆半径的比例。

1.2 Delaunay三角剖分

所有三角形的外接圆均满足空圆性质的三角剖分,称为一个Delaunay三角剖分。

  1. 空圆性质
    Delaunay三角网是唯一的(任意四点不能共圆),在Delaunay三角网中任一三角形(或边)的外接圆范围内(边界除外)不会有其他点存在。
    在这里插入图片描述
    在这里插入图片描述

左图的三角剖分是Delaunay的,任何一个三角形的外接圆内部都不包含点集中的顶点;
右图的三角剖分不是Delaunay的,因为下面的两个三角形的外接圆内部包含了顶点。

二. Delaunay三角剖分的相关理论

2.1 Delaunay三角形和(局部)Delaunay边的概念

  • 对三角剖分中的一个三角形,如果其外接圆满足空圆性质,称为一个Delaunay三角形
  • 对三角剖分中的一条边,若存在一个外接圆满足空圆性质,称为一条Delaunay边(一条边的外接圆可以是经过这条边两个顶点的任意圆,不唯一);
  • 对三角剖分中的一条属于两个三角形t1,t2的边e,若存在一个外接圆不包含三角形t1,t2中的任何顶点称为局部Delaunay边。若一条边只属于一个三角形,也属于局部Delaunay边。

2.2 Delaunay引理

对一个三角剖分T,以下三个命题互相等价:

  • T中所有三角形均为Delaunay三角形;
  • T中所有三角形的边均为Delaunay边;
  • T中所有三角形的边均为局部Delaunay边。

2.3 翻转边算法(flip algorithm)

定理:对三角剖分T中的一条边e,若它不是局部Delaunay的,则可以被翻转成为一条局部Delaunay边e’。

边的翻转:假设一条边e属于两个三角形t1,t2,这两个三角形的合集所构成的四边形有两条对角线,e为其中一条。现在用另一条对角线e’替换e,得到两个新的三角形t1’,t2’,并用这两个新的三角形替换原三角剖分中的t1,t2,得到新的三角剖分T’。这个操作称为边的翻转。

每进行一次翻转边操作时,都把三角剖分“局部”地改善了。更具体的讲,有以下结论:

  • 最小角增大:翻转边e后的两个相邻三角形的6个内角中的最小角大于等于原先的两个三角形6个内角中的最小角;
  • 外接圆半径缩小:翻转边e后的两个相邻三角形的外接圆半径最大值小于原先的两个三角形外接圆半径的最大值;
  • 四点共圆的情况:若一条边e的两个相邻三角形的顶点A,B,C,D四点共圆,则无论翻转与否,这条边都是局部Delaunay边。

在这里插入图片描述
根据Delaunay引理,对任意一个三角剖分T,只要持续进行上述的翻转边操作,最终总可以转化为一个Delaunay三角剖分。

2.4 Delaunay三角剖分的最优性质

  1. 最大化最小角性质:
    在给定点集P的所有三角剖分中,Delaunay三角剖分得到的最小角是最大的。
  2. 最小化外接圆性质:
    在给定点集P的所有三角剖分中,Delaunay三角剖分得到的最大外接圆半径是最小的。
  3. 若点集P中任意四点不共圆,则存在唯一的Delaunay三角剖分T。若点集P中四点A,B,C,D共圆,且△ABC,△BCD属于Delaunay三角剖分T,那么将边BC翻转后得到的三角剖分T’(包含△ABD,△ACD)同样是一个Delaunay三角剖分。

三. Delaunay三角剖分的构造算法

3.1 Lawson算法

  1. 先计算点集P的包围盒(bounding box),将包围盒的四个顶点加入P中得到P’。根据包围盒生成两个超三角形(super triangles),构成初始三角剖分T0。由于只包含两个直角三角形,T0是(包围盒四个顶点的)一个Delaunay三角剖分。
  2. 将点集P中的顶点逐一插入现有的三角剖分Ti中,并进行如下调整:
  • 设插入的顶点v位于三角形t中,将v与三角形的三个顶点连接,使t分裂为3个三角形t1,t2,t3;
  • 分别检查t1,t2,t3是否满足空圆性质,若不满足则进行翻转边操作,直到没有坏边为止。此时得到一个包含顶点v的新Delaunay三角剖分。
  1. 当最后一个顶点插入到三角剖分中,并且完成所有翻转边操作后,我们得到了点集P’的一个Delaunay三角剖分。现在删除第一步中加入的包围盒的四个顶点,并且去除所有与它们连接的三角形,则剩下的三角形就构成点集P的Delaunay三角剖分T。

3.2 Bowyer-Watson算法

  1. 同Lawson算法
  2. 将点集P中的顶点逐一插入现有的三角剖分中,并进行如下调整:
  • 在现有三角剖分中,所有外接圆包含顶点v的三角形的合集构成一个“星形多边形”。星形多边形的含义是多边形的任何一个顶点到v的连线都在多边形内部。
  • 对于上述星形多边形,将其内部的三角形全部删除,形成一个“空穴”。将空穴边界的顶点与新添加的顶点v连接得到新的三角形,替代剖分中被删除的三角形,此时得到一个包含顶点v的新Delaunay三角剖分。
  1. 同Lawson算法

在这里插入图片描述
由于Delaunay三角剖分的唯一性,两种算法在效果上没什么区别。但Bowyer-Watson算法因为缩短了搜索坏边的过程,效率会更高一些,所以实际应用中我们往往使用Bowyer-Watson算法。

四. 基于Delaunay三角剖分法的网格生成算法

在这里插入图片描述

4.1 Delaunay平面区域网格生成算法

生成三角网格与构造三角剖分的主要区别在于,点集P并非给定,需要自己去生成。而一旦确定了点集P,剩下的工作就是构造三角剖分了。实际上,生成点集P与构造三角剖分的过程是同时进行的,其过程如下:

  • 计算区域的包围盒,生成两个超三角形作为初始三角网格,根据边界曲线生成边界点;
  • 将边界点逐一插入到三角网格中,每一步插入后,用Bowyer-Watson算法得到新的Delaunay三角网格;
  • 将第一步插入的辅助顶点删除(同时删除与其连接的三角形),得到关于全部边界点的Delaunay三角网格(亦即边界点的Delaunay三角剖分);
  • 在区域内部的三角形,根据一定的条件,将重心插入三角网格,并根据Bowyer-Watson算法调整,得到新的Delaunay三角剖分。直到不再有需要插入的重心点,此时得到区域的完整Delaunay三角网格。

在这里插入图片描述

4.2 三维模型的Delaunay三角网格生成算法

  1. 遍历模型的所有边(edge),生成边界点;
  2. 遍历模型的所有面(face),收集其边界点在参数区域的坐标。然后在参数区域上按照上面的算法生成Delaunay三角网格;
  3. 将每个面在参数区域上生成的内部点和三角形投射到三维空间,添加到三角网格中;

这里要注意的是,每个面上的点需要两份编号,一个局部(local)编号用于参数区域上的三角网格,及一个全局(global)编号用于三维空间的整体三角网格。在网格生成过程中需要时刻保持这两种编号的对应关系。

参考文章:
https://zhuanlan.zhihu.com/p/459884570
https://ww2.mathworks.cn/help/matlab/math/delaunay-triangulation.html
https://blog.csdn.net/qq_43258953/article/details/105080150

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1031442.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

缺口的大利润!伦敦银如何使用缺口交易

在伦敦银市场中,我们经常能够看见市场跳空形成缺口,其实,如果利用得当,我们在伦敦银投之中,这些缺口是能够为我们创造盈利机会的,那么下面我们就来讨论一下在伦敦银投之中如何认识这些跳空缺口,…

哪些远程桌面软件适合与团队共享屏幕和文件

远程桌面软件是一种方便团队协作和共享工作的工具。它们能够允许用户通过互联网连接到其他计算机,实现远程访问、共享屏幕和文件、以及协同工作。以下是一些适合与团队共享屏幕和文件的常用远程桌面软件。 1、RayLink RayLink是一款功能强大且易于使用的远程桌面软…

企业微信 API 接口调用教程:图文详解企业微信 API 的使用方法

本文通过 access_token 凭证的方式来讲解怎么调用 企业微信 API,并一步步介绍如何获取企业微信 API 的 corpsecret、corpid、access_token 凭证以及怎么向企业微信的应用发送消息。 企业微信 API 在线地址为:概述 - 企业微信 API ,这个在线地…

大型架构设计的演进之路

Java全能学习面试指南:https://javaxiaobear.cn 今天我们一起看看大型互联网系统架构的演进之路,主要包含三部分内容。 第一部分是大型互联网系统的特点,分析大型互联网有哪些特点和挑战,它们是现在一些技术和架构方案产生的原因。…

性能测试 —— 性能测试常见的测试指标 !

一、什么是性能测试 先看下百度百科对它的定义,性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。 我们可以认为性能测试是:通过在测试环境下对系统或构件的性能进行探测,用以验证在生产环…

网站有反爬机制就爬不了数据?那是你不会【反】反爬

目录 前言 一、什么是代理IP 二、使用代理IP反反爬 1.获取代理IP 2.设置代理IP 3.验证代理IP 4.设置代理池 5.定时更新代理IP 三、反反爬案例 1.分析目标网站 2.爬取目标网站 四、总结 前言 爬虫技术的不断发展,使得许多网站都采取了反爬机制&#xff…

SSL证书如何做到保障网站安全?

当网站显示不安全时,用户会在头脑中产生该网站是否合法的疑问,如果是购物网站或者购物商城,那意味着可能会损失大部分的用户。而SSL证书能有效保障网站的安全性,轻松解决网站不被用户信任的问题。那么,SSL证书究竟是如…

社交媒体商业禁令冲击:TikTok如何应对印尼政策变化?

随着社交媒体的普及和发展,各国政府开始越来越关注这一领域的监管和控制。印尼政府最近的决定,禁止在社交媒体上进行商品交易,引起了广泛的关注。 这一政策变化对TikTok等社交媒体平台带来了巨大的挑战,要求它们重新审视商业模式…

小米云原生文件存储平台化实践:支撑 AI 训练、大模型、容器平台多项业务

小米作为全球知名的科技巨头公司,已经在数百款产品中广泛应用了 AI 技术,这些产品包括手机、电视、智能音箱、儿童手表和翻译机等。这些 AI 应用主要都是通过小米的深度学习训练平台完成的。 在训练平台的存储方案中,小米曾尝试了多种不同的…

按照经纬度进行天气下载

https://power.larc.nasa.gov/data-access-viewer/ 点击data access viewer classic

数据工程中的单元测试完全指南

在数据工程领域中,经常被忽视的一项实践是单元测试。许多人可能认为单元测试仅仅是一种软件开发方法论,但事实远非如此。随着我们努力构建稳健、无错误的数据流水线和SQL数据模型,单元测试在数据工程中的价值变得越来越清晰。 本文带你深入探…

安卓桌面记事本便签软件哪个好用?

日常生活及工作中,很多人常常会遇到一些一闪而现的灵感,这时候拿出手机想要记录时,却找不到记录的软件。在这个快节奏的时代,安卓手机是我们日常生活不可或缺的伙伴。然而,正因为我们的生活如此忙碌,记事变…

从 Hackathon 战队到创业公司,和开发者们聊聊真实世界 AI Apps 的基础设施丨活动预告

在不久前结束的 TiDB Future App Hackath on 2023 上,来自全球 88 个国家的 1492 名参赛者们借助 AI 和 TiDB Serverless 的能力,构建了许多令人印象深刻的项目。 打造 Hackathon 的项目是一个从 0-1 的过程,真实世界中也涌现出了一批创业公…

Java 21正式发布了,来来来,一睹它的芳容!

Oracle 高兴地宣布 JDK 21 已经正式上线了。这是按照每六个月一次的发布计划,准时推出的第 12 个版本。这种定期的发布模式为开发者提供了稳定和可预见的创新,使得他们可以轻松地接纳和采用这些新特性。 Java 由于其出色的性能、稳定性和安全性使其持续成为全球最受欢迎的编程…

启山智软/微信小程序商城源码(微信小程序)

文章目录 启山智软一、小程序商城首页二、小程序商城分类三、小程序商城我的源码获取 启山智软 想要了解代码规范,学习商城解决方案,点击下方官网链接联系客服 作者:启山智软 官网及博客:启山智软官网、CSDN、掘金、gitee 简介&a…

爱分析《商业智能最佳实践案例》

近日,国内知名数字化市场研究咨询机构爱分析发布《2023爱分析商业智能最佳实践案例》,此评选活动面向落地商业智能的各行企业和商业智能厂商,以第三方专业视角深入调研,评选出具有参考价值的创新案例。永达汽车集团与数聚股份合作…

【Zabbix监控一】zabbix的原理与安装

利用一个优秀的监控软件,我们可以: ●通过一个友好的界面进行浏览整个网站所有的服务器状态 ●可以在 Web 前端方便的查看监控数据 ●可以回溯寻找事故发生时系统的问题和报警情况 总结:zabbix主要功能 监控,cpu负载,内存使用&a…

了解:组件和组件的值的分享

<template><Block title"热门公司"><div slot"content" class"container"><CompanyList :company-list"currentPageCompany"></CompanyList><div class"pagination"><el-pagination…

【高级IO】第一讲(5种IO模型的介绍、select函数介绍、一个简单select服务器)

高级IO 1.五种IO模型介绍2.Select函数介绍 1.五种IO模型介绍 点击跳转: 5种I/O模型 2.Select函数介绍 点击跳转: 【Linux】——select详解

LeetCode 接雨水 双指针

原题链接&#xff1a; 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题面&#xff1a; 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a…