CGAL中2D三角剖分的数据结构

1、定义

        三角剖分数据结构是一种设计用于处理二维三角剖分表示的数据结构。三角剖分数据结构的概念主要是设计用作CGAL2D三角剖分类的数据结构,这些类是嵌入平面中的三角剖分。然而,这个概念似乎更一般,可以用于任何可定向的无边界三角剖分曲面,无论三角剖分嵌入的空间维数是多少。

1.1、一种基于面和顶点的数据结构

        CGAL2D三角剖分的表示基于面和顶点,边仅通过两个面之间的邻接关系隐式表示。

        三角剖分数据结构可以被看作是面和顶点的容器,用于维护它们之间的关联和邻接关系。

        每个三角形面都可以访问它的三个入射顶点和它的三个相邻面。每个顶点都可以访问它的一个入射面,并通过该面访问它的入射面的循环列表。

        面的三个顶点用索引0、1和2。面的邻居也用索引0、1、2,这样用i索引的邻居与具有相同索引的顶点相对。见下图,该图所示的函数ccw(i)和cw(i)分别计算i+1和i-1模3。

        每个边都有两个隐式表示:与索引为i的顶点相对的面f的边,可以表示为f的邻居(i)的边。

        这种对单形复体的表示在任何维度上都是可扩展的。更准确地说,在维度 d 中,数据结构将显式表示单元(即最大维度的面)和顶点(即维度为 0 的面)。所有介于 1 和 d-1 之间的维度的面都将有一个隐式表示。二维三角剖分数据结构可以表示 2、1 或 0 维的单形复体。 

1.2、顶点和面的集合

        二维三角剖分数据结构所维护的面集合是每个边缘与两个面相交的集合。换句话说,所维护的面集合在拓扑上等价于二维三角剖分的球体。

        此规则扩展到出现在退化情况或三角剖分具有少于三个顶点的情况下的低维三角剖分数据结构。一维三角剖分结构维护一组顶点和边,它们形成一个环,在拓扑上等价于一个1-球体。

        零维三角剖分数据结构只包括两个相邻的顶点,在拓扑上等价于一个0-球体。

2、三角剖分数据结构的概念

        可以看出,TriangulationDataStructure_2模型有一个用于三角剖分面和顶点的容器。这个类还负责三角剖分的组合完整性。这意味着在进行三角剖分的组合修改时,三角剖分数据结构保持三角剖分顶点和面之间的适当关联和邻接关系。组合修改一词是指不涉及三角剖分几何嵌入知识的操作。例如,在给定面或给定边缘中插入新顶点,抑制度为三的顶点,翻转两条边是在数据结构级别执行的组合操作的例子。

        三角测量数据结构需要提供:三角剖分的顶点和面的类型 Vertex 和 Face;类型Vertex_handle和Face_handle,它们是Handle概念的模型,通过它们可以访问顶点和面;迭代器,用于访问三角剖分的所有顶点、边和面;循环器访问给定顶点相关的所有顶点、边和面;三角剖分数据结构负责创建和删除面和顶点(内存管理)。它提供的功能可以给出三角剖分中的面、边和顶点的数量。

        三角剖分数据结构提供成员函数以执行三角剖分的以下组合变换:两个相邻面的翻转;添加一个新的顶点来分割给定的面;添加分割给定边的新顶点;增加一个新的顶点,使退化的低维三角测量的维数增加一;移除入射到三个面的顶点;删除降低三角测量尺寸的顶点

3、默认的三角剖分数据结构

        CGAL提供了类 Triangulation_data_structure_2<Vb,Fb> 作为默认的三角剖分数据结构。

3.1、灵活性

        为了提供灵活性,默认的三角剖分数据结构由两个参数模板化,这两个参数分别代表顶点基类和面基类。概念TriangulationDSVertexBase_2和TriangulationDSFaceBase_2描述了三角剖分数据结构的顶点和面类的要求。

        这种设计允许用户插入三角剖分数据结构,其中包含针对其应用而调整的自己的顶点或面类。

3.2、模板参数的循环依赖性

        由于邻接关系和关联关系存储在顶点和面中,因此顶点和面类必须知道三角剖分数据结构提供的面和顶点上的句柄类型。因此,顶点和面类需要由三角剖分数据结构模板化。由于三角剖分数据结构本身是由顶点和面类模板化的,这导致了一种循环依赖关系。

3.3、重新绑定机制

       CGAL提出的解决这种循环依赖的解决方案基于类似于标准分配器类 std:: allocator 中使用的机制的重新绑定机制。 插入三角剖分数据结构实例化的顶点和面类本身是用一个伪数据结构实例化的。 然后,三角剖分数据结构将重新绑定这些类,将自己插入伪数据结构的位置,然后再使用它们来派生顶点和面类。 重新绑定是通过顶点和面类中的嵌套模板类 Rebind_TDS 执行的,该类将重新绑定的类作为称为 Other 的类型提供。

        这是它的工作原理图。首先,这是三角剖分数据结构中的重新绑定。

template < class Vb, class Fb >
class Triangulation_data_structure
{
typedef Triangulation_data_structure<Vb,Fb> Self;
// Rebind the vertex and face base to the actual TDS (Self).
typedef typename Vb::template Rebind_TDS<Self>::Other VertexBase;
typedef typename Fb::template Rebind_TDS<Self>::Other FaceBase;
// ... further internal machinery leads to the final public types:
public:
typedef ... Vertex;
typedef ... Face;
typedef ... Vertex_handle;
typedef ... Face_handle;
};

3.4、使用灵活性

        有几种方法可以利用三角测量数据结构提供的灵活性。

        首先,当用户需要在顶点和面中拥有不依赖于三角剖分数据结构所定义类型的附加信息时,可以插入预定义的类 Triangulation_vertex_base_with_info_2 和 Triangulation_face_base_with_info_2。这些类有一个模板参数 Info,由用户定义的类型实例化。它们存储此类型的数据成员,并允许对其进行访问。

        其次,用户可以从默认基类中派生自己的基类:Triangulation_ds_vertex_base_2和Triangulation_ds_face_base_2是默认基类,可插入单独使用的三角剖分数据结构。三角剖分类需要一个数据结构,其中已经插入了其他基类。大多数三角剖分类的默认基类是Triangulation_vertex_base_2,而Triangulation_face_base_2是三角剖分数据结构插入三角剖分类时的默认基类。

        最后,用户可以编写自己的基类。如果单独使用三角剖分数据结构,则基类的要求由概念TriangulationDSVertexBase_2和TriangulationDSFaceBase_2描述。如果三角剖分数据结构被插入到三角剖分类中,则顶点和基类的概念取决于三角剖分类。适用于基本三角剖分和Delaunay三角剖分的最基本概念是TriangulationVertexBase_2和TriangulationFaceBase_2。

CGAL 5.6 - 2D Triangulation Data Structure: User Manual

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

6.1810: Operating System Engineering <Lab2 syscall: System calls>

课程链接&#xff1a;6.1810 / Fall 2023 一、本节任务 二、要点 操作系统要满足三要素&#xff1a;并发、隔离、交互&#xff08;multiplexing, isolation, and interaction&#xff09;。 宏内核&#xff08;monolithic kernel&#xff09;&#xff1a;是操作系统核心架构…

开源图床Qchan本地部署远程访问,轻松打造个人专属轻量级图床

文章目录 前言1. Qchan网站搭建1.1 Qchan下载和安装1.2 Qchan网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar云端设置2.2 Cpolar本地设置 3. 公网访问测试总结 前言 图床作为云存储的一项重要应用场景&#xff0c;在大量开发人员的努力下&#xff0c;已经开发出大…

基于机器深度学习的交通标志目标识别

在线工具推荐&#xff1a; 三维数字孪生场景工具 - GLTF/GLB在线编辑器 - Three.js AI自动纹理化开发 - YOLO 虚幻合成数据生成器 - 3D模型在线转换 - 3D模型预览图生成服务 智能交通系统&#xff08;ITS&#xff09;&#xff0c;包括无人驾驶车辆&#xff0c;尽管在道路…

最受好评的 5 款最佳安卓手机数据恢复工具

您想从 Android 手机中恢复永久删除或丢失的数据和文件吗&#xff1f;您可以借助顶级 Android 数据恢复软件来完成此操作。如果您的数据已被删除、损坏或格式化&#xff0c;则可以将已删除的文件恢复到您的 Android 手机中。Android 设备丢失文件的原因可能有多种。 不管你的手…

非全自研可视规则引擎RuleLinK可视化之路

导读 上一篇《非全自研可视化表达引擎-RuleLinK》介绍了RuleLink的V1.0版本&#xff0c;虽说一定程度上消除了一些配置相关的样板式代码&#xff0c;也肉眼可见的消除了一些研发资源的浪费&#xff1b;RuleLink的初衷是让业务配置变得简单&#xff0c;是面向运营同学。要真正面…

聚观早报 |国行PS5轻薄版开售;岚图汽车11月交付7006辆

【聚观365】12月2日消息 国行PS5轻薄版开售 岚图汽车11月交付7006辆 比亚迪推出12月限时优惠 特斯拉正式交付首批Cybertruck 昆仑万维发布「天工 SkyAgents」平台 国行PS5轻薄版开售 索尼最新的PlayStation5主机&#xff08;CFI-2000型号组-轻薄版&#xff09;国行版本正…

OpenHarmony 关闭息屏方式总结

前言 OpenHarmony源码版本&#xff1a;4.0release 开发板&#xff1a;DAYU / rk3568 一、通过修改系统源码实现不息屏 修改目录&#xff1a;base/powermgr/power_manager/services/native/profile/power_mode_config.xml 通过文件中的提示可以知道DisplayOffTime表示息屏的…

EasyExcel两行表头

例子&#xff1a; 代码&#xff1a; StorageService localStorageService storageFactory.getLocalStorageService();String path "";// 文件信息String dateTime DateUtils.formatTimestampToString(new Date());String title "xxx统计";String fil…

前端学习系列之CSS

目录 CSS 简介 发展史 优势 基本语法 引用方式 内部样式 行内样式 外部样式 选择器 id选择器 class选择器 标签选择器 子代选择器 后代选择器 相邻兄弟选择器 后续兄弟选择器 交集选择器 并集选择器 通配符选择器 伪类选择器 属性选择器 CSS基本属性 优…

七、ZooKeeper选举机制

目录 1、概念 2、全新集群选举 3、非全新集群选举 zookeeper默认的算法是FastLeaderElection,采用投票数大于半数则胜出

接口测试基础知识

一、接口测试简介 什么是接口测试&#xff1f; 接口测试是测试系统组件间接口的一种测试&#xff0c;主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。 测试的重点&#xff1a; 检查数据的交换&#xff0c;传递和控制管理过程&#xff1b;检查系统间的相互…

OpenTelemetry系列 - 第1篇 相关概念

目录 一、背景二、概念2.1 Traces & Span2.2 Metrics2.3 Logs2.4 Baggage2.5 OTel2.6 OTLP2.7 Resources2.8 Instrumentation Scope2.9 Sampling 三、核心组件 一、背景 OpenTelemetry是一个可观察性框架和工具包&#xff0c;旨在创建和管理遥测数据&#xff0c;如跟踪、指…

一个用c#瞎写的sftp工具

0.下载地址 https://wwus.lanzouj.com/iOZUv1gkgpze 密码:123456 1.能进行单个和批量下载, 没有弄上传 2.速度奇差,可能是某些地方没弄好.有一定的进度显示,但是不太准. 3.很多地方没弄好,有能力的自己弄一下 4.在app.config文件配置sftp

深度学习第4天:感知机模型

☁️主页 Nowl &#x1f525;专栏《机器学习实战》 《机器学习》 &#x1f4d1;君子坐而论道&#xff0c;少年起而行之 ​ 文章目录 感知机模型介绍 神经网络搭建感知机 结构 准备训练数据 感知机的损失函数与优化方法 测试结果 完整代码 多层感知机 结语 感知机模…

火车头插件-最全火车头伪原创图片存储等插件

火车头插件。作为一个功能强大的工具&#xff0c;火车头插件以其众多特色引起了广大用户的关注。而其中&#xff0c;火车头采集器更是备受瞩目。我们将分享火车头插件的安装教程&#xff0c;还会深入了解火车头伪原创插件的应用。 火车头插件安装教程 我们来安装火车头插件&a…

JavaScript 内存泄漏的检测与防范:让你的程序更稳定

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

HT7713 3A同步降压变换器 快速瞬态响应

HT7713 是一款 3A 降压转换器&#xff0c;具有Z少的外部元件和低关断电流。HT7713具有快速瞬态响应的特点&#xff0c;输出电容器采用低 ESR &#xff08;聚合物&#xff09;或超低 ESR&#xff08;陶瓷&#xff09;&#xff0c;无需外部补偿。 HT7713在轻载时以脉冲跳跃模式工…

Spring Security 6.x 系列(8)—— 源码分析之配置器SecurityConfigurer接口及其分支实现

一、前言 本章主要内容是关于配置器的接口架构设计&#xff0c;任意找一个配置器一直往上找&#xff0c;就会找到配置器的顶级接口&#xff1a;SecurityConfigurer。 查看SecurityConfigurer接口的实现类情况&#xff1a; 在 AbstractHttpConfigurer 抽象类的下面可以看到所有…

HT81298 集成免滤波器调制D类音频功放

HT81298是一款内置升压的立体声D类音频功率放大器&#xff0c;HT81298内部集成免滤波器调制技术&#xff0c; 能够直接驱动扬声器&#xff0c;内置的关断功能使待机 电流Z小化&#xff0c;还集成了输出端过流保护、片内 过温保护、输入电源欠压异常保护、升压电压 过压保护等功…

Docker 环境中 Spring Boot 应用的 Arthas 故障排查与性能优化实战

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…