CGAL的周期三角剖分(相关信息较少)

        CGAL的周期二维三角剖分类旨在表示二维平面上的一组点的三角剖分。该三角剖分形成其计算空间的分区。它是一个单纯复体,即它包含任何k-单纯形的所有关联j-单纯形(j<k),并且两个k-单纯形要么不重叠,要么共享一个公共的j-面,j<k。发生的维度小于等于2的单纯形称为顶点、边缘和面。

1、扁平环面

        二维周期性三角剖分包计算了T2c空间中的三角剖分,该空间定义如下:设c属于R不等于0且G是(c·Z2,+)的群,其中c·Z表示包含所有整数倍c的集合。平环面是以下等式定义的空间:T2c:=R2/G。参数c定义了周期。

        T2c的元素是R2中点集的等价类。我们称这些点为T2c元素的代表。实现不是直接在T2c的元素上工作,而是在R2的一些代表上工作。给定α和β,方块[α,α+c)×[β,β+c)包含T2c中每个元素的唯一代表。我们称其为原始域。从今以后,当我们谈论点时,我们通常指的是原始域内点的代表。请注意,任何输入点都需要是上述定义的原始域的半开方块的元素。

        有一些单纯形包含了原始域内的点,但也包含了原始域外的点。原始域外的点是原始域内点的周期性副本。因此,要指定一个单纯形,我们需要点和一些附加信息来确定每个点的相应周期性副本。T2c的代表的集合是一个方块点网格。我们通过一个二维整数向量(ox,oy)来指定每个代表,称为偏移量。它代表原始域内的代表在x和y方向上必须平移的周期数量。(0,0)对应于原始域内的代表。要指定k单纯形,我们需要k+1个点偏移量对。

2、演示

        三角剖分是通过关联和邻接关系连接在一起的顶点和面的集合。每个面都可以访问它的三个关联顶点、它们的相应偏移量以及它的三个相邻面。每个顶点都可以访问它的一个关联面。

        面的三个顶点在正方向上用0、1和2表示。T2c中单形的方向被定义为R2中相应单形的方向,由各自偏移量确定的代表给出。

        与基础组合三角剖分一样,面的邻居以0、1和2进行索引,使得索引为i的邻居与索引相同的顶点相对。边缘(1-面)没有明确表示:一条边缘由一个面和一个索引给出(面f的边缘i是f的边缘,与索引为i的顶点相对)。

        一些点集在T2c中不承认三角剖分。在这种情况下,我们使用点集的9个周期拷贝,排列在一个边长为3c的正方形中。以这种方式构造的任何点集在R2/G'中都有三角剖分,其中G'=(3c⋅Z)2。因此,我们在这个空间中计算三角剖分,这是一个T2c的9片覆盖空间。

         1个覆盖空间和9个覆盖空间中的相同周期三角剖分。

        管理副本的功能在很大程度上对用户隐藏。但是有一些不可忽视的影响。例如,如果点集不允许在T2c中进行三角剖分,则组合迭代器(Face_iterator、Edge_iterator和Vertex_iterator)会返回内部存储的所有单形,对应于每个几何基元(三角形、线段和点)的9个周期副本。这是确保邻接关系一致性的必要条件。如果希望每个基元只有一个周期副本,我们提供几何迭代器。它们返回三角剖分的几何基元,而没有它们之间的关系。另一个影响是,当算法从9片覆盖切换到1片覆盖时,引用已删除项的Vertex_handles和Face_handles失效。

        在数据结构中,每个顶点存储它对应的输入点。 如果我们在 9 片覆盖空间中计算,每个顶点存储它对应的原始域内的代表。 因此,与 T2c 的同一元素对应的 9 个顶点都在 R2 中存储了相同的代表,而不是不同的周期副本。

        有效性:        周期三角剖分被称为局部有效的,当且仅当:        (a)-(b) 其基础组合图,三角剖分数据结构,在局部是有效的。        (c)任何单元的顶点都是按照正方向排列的。 

3、Delaunay三角剖分

        类Periodic_2_Delaunay_triangulation_2实现了T2c中点集的Delaunay三角剖分。

        Delaunay三角剖分具有空圆性质,即每个面的外接圆不包含三角剖分中的任何其他顶点。这些三角剖分是唯一定义的,除了四个点共圆的退化情况。但是请注意,即使在这些情况下,CGAL实现也会计算出唯一的三角剖分。

        此实现是完全动态的:它支持插入点和删除顶点。

4、三角剖分的继承

        Periodic_2_triangulation_hierarchy_2 类是第 2D_Triangulations 章三角剖分层次一节中描述的层次结构在周期情况下的改编。

        类 Periodic_2_triangulation_hierarchy_2<Tr> 继承了作为模板参数 Tr 传递的三角剖分类型。插入、移动和删除成员函数被重写,以在每次操作时更新数据结构。定位查询也被重写,以利用数据结构进行快速处理。

5、软件设计

        我们选择前缀“Periodic_2”来强调三角剖分在空间的所有两个方向上都是周期性的。还存在“圆柱形”周期性,其中三角剖分仅在空间的一个方向上是周期性的。

        两个主要类Periodic_2_Delaunay_triangulation_2和Periodic_2_triangulation_2提供高级几何功能,并负责几何有效性。 Periodic_2_Delaunay_triangulation_2包含所有Delaunay三角剖分特有的功能,如点插入和顶点删除、圆边测试、查找给定点的冲突区域、对偶函数等。 Periodic_2_triangulation_2包含所有一般三角剖分通用的功能,如三角剖分中点的位置、访问函数、几何查询如方向测试等。

        它们被构建为三角剖分数据结构之上的层,该结构存储了它们的组合结构。几何和组合之间的这种分离在软件设计中反映为三角剖分类采用两个模板参数的事实:

        几何特征类,它提供了用作点的类型以及对它们的基本操作(谓词和构造)。此外,它还包含偏移类型。这个参数的概念在几何特征参数一节中有更详细的描述。应该细化的概念是 Periodic_2Triangulation Traits_2(用于 Periodic_2_triangulation_2)和 Periodic_2DelaunayTriangulation Traits_2(用于 Periodic_2_Delaunay_triangulation_2)。

5.1、几何特征参数

        周期三角剖分类 Periodic_2_triangulation_2< Traits, Tds> 的第一个模板参数是几何特征类,由概念 Periodic_2Triangulation Traits_2 描述。类似地,Delaunay三角剖分类 Periodic_2_Delaunay_triangulation_2< Traits,Tds> 的第一个模板参数是几何特征类,由概念 TPeriodic_2DelaunayTriangulation raits_2 描述。这些概念与 Triangulation Traits_2 和 DelaunayTriangulation Traits_2)的不同之处在于,它们还使用偏移实现了所有对象、谓词和构造。

        类 Periodic_2_Delaunay_triangulation_traits_2< Traits,Periodic_2Offset_2> 提供了所需的功能。 它有两个模板参数:概念 DelaunayTriangulation Traits_2 的模型和概念 Periodic_2Offset_2 的模型。 由于概念 Triangulation_Traits_2 细化了概念 DelaunayTriangulation Traits_2,类 Periodic_2_Delaunay_triangulation_traits_2< Traits,Periodic_2Offset_2> 也是概念 Triangulation Traits_2 的模型。

        Cartesian、Homogeneous、Simple_cartesian、Simple_homogeneous 和 Filtered_kernel 核都可以用作 Traits 的模型。 Periodic_2_triangulation_traits_2 提供精确谓词和精确构造(如果 Traits 提供)。如果使用 Filtered_kernel<CK> 作为第一个模板参数,其中 CK 是不精确内核,则它提供精确谓词,但不提供精确构造。使用 Exact_predicates_inexact_constructions_kernel 作为 Traits 提供快速和精确谓词,但不提供精确构造,使用 Exact_predicates_exact_constructions_kernel 提供快速和精确谓词和精确构造。如果使用点、线段、三角形和四面体的对偶构造和构造,建议使用后者。

        第二个参数Periodic_2Offset_2默认为Periodic_2_offset_2。

5.2、三角剖分数据结构参数

        主要类 Periodic_2_triangulation_2 和 Periodic_2_Delaunay_triangulation_2(剖分方法) 的第二个模板参数是一个三角剖分数据结构类。该类必须是概念 TriangulationDataStructure_2 的模型,该概念描述了该类作为保持关联和邻接关系的面和顶点的容器的要求。

        此外,概念 TriangulationDataStructure_2::Vertex 和 TriangulationDataStructure_2::Face 被扩展为支持周期性:顶点和面必须是 Periodic_2TriangulationVertexBase_2 和 Periodic_2TriangulationFaceBase_2 的模型。此类概念的一个模型是CGAL::Triangulation_data_structure_2。它由一个顶点基类和一个面基类参数化,这使得可以定制三角剖分数据结构使用的顶点和单元,从而使用它的几何三角剖分。提供了顶点和面概念的基本模型:CGAL::Periodic_2_triangulation_vertex_base_2 和CGAL::Periodic_2_triangulation_face_base_2。

        所有三角剖分类中都提供了三角剖分数据结构参数的默认值,因此用户不需要指定,除非他想要使用不同的三角剖分数据结构或不同的顶点或单元基类。

5.3、设计的灵活性

        Periodic_2_triangulation_2 使用 TriangulationDataStructure_2 的方式与 Triangulation_2 基本相同。这就是为什么软件设计中描述的灵活性以完全相同的方式适用。此外,类 Triangulation_vertex_base_with_info_2 和 Triangulation_face_base_with_info_2 可以直接重用。

6、性能

        将二维周期性Delaunay三角剖分的性能与欧几里德二维Delaunay三角剖分进行比较。使用空间排序将点插入欧几里德二维Delaunay三角剖分中。在周期性三角剖分中,首先以随机顺序插入点,直到三角剖分在1个覆盖空间中有效。然后使用空间排序插入剩余的点。对于大型点集,首先插入虚拟点以在1个覆盖空间中创建有效的三角剖分。然后使用空间排序插入所有点。作为最后一步,再次删除虚拟点。

7、可视化 

        通过调用cgal::draw<P2T2>()函数,可以可视化二维周期三角剖分,如下例所示。该函数打开一个新窗口,显示给定的周期三角剖分。周期三角剖分的元素可以以四种不同的模式查

        STORED 显示所有几何图元,因为它们存储在 Triangulation_data_structure_2 中;

        UNIQUE 显示每个几何图元的一个代表,即使在多片覆盖空间中计算三角剖分也是如此;

        STORED_COVER_DOMAIN 与 STORED 相同,但也会显示与当前覆盖空间的原始域相交的非空的所有基元;

        UNIQUE_COVER_DOMAIN 与 UNIQUE 相同,但也会显示与当前覆盖空间的原始域相交的非空的所有基元。

CGAL 5.6 - 2D Periodic Triangulations: User Manual

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

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

相关文章

博客访问量到达2万了!

博客访问量到达2万了&#xff01;这也发生的太快了吧&#xff0c;前两天才1万7千访问量&#xff0c;用了平台送的1500的流量券&#xff0c;粉丝从1个&#xff08;N年前的&#xff09;&#xff0c;蹭蹭的往上涨&#xff0c;这也太“假”了吧。关键我也是个菜鸟自学者&#xff0c…

杂散表的阅读

杂散表得阅读 —— 以Marki公司得手册为例 混频杂散&#xff08;Mixing Spurs&#xff09;是指信号经过混频器时&#xff0c;不仅会与本振混频&#xff0c;还会与本振的高次谐波混频&#xff08;对于第二章说的方波本振&#xff0c;信号只与本振的奇次谐波混频因为方波只含有奇…

写论文焦虑?No,免费AI写作大师来帮你

先来看1分钟的视频&#xff0c;对于要写论文的你来说&#xff0c;绝对有所值&#xff01; 还在为写论文焦虑&#xff1f;免费AI写作大师来帮你三步搞定 第一步&#xff1a;输入关键信息 第二步&#xff1a;生成大纲 稍等片刻后&#xff0c;专业大纲生成&#xff08;由于举例&am…

minio配置监听(对象操作日志)

minio配置监听对象操作 本文档适用于minio2021.3.17版本 有时我们需要查看minio中对象操作的日志&#xff0c;比如像监听minio某一个桶中的删除事件&#xff0c;就需要配置监听。minio支持将监听的结果输出到es、pg、amq等等&#xff0c;下面介绍一下将minio对象操作监听结果输…

《C++ Primer》第11章 关联容器

参考资料&#xff1a; 《C Primer》第5版《C Primer 习题集》第5版 关联容器支持高效关键字查找和访问&#xff0c;两个主要的关联容器是 map 和 set 。map 中的元素是键-值&#xff08; key value &#xff09;对&#xff0c;set 中的元素只包含一个关键字。 标准库提供 8 …

C语言学习笔记之数组篇

数组是一组相同类型元素的集合。 目录 一维数组 数组的创建 数组的初始化 数组的使用 数组在内存中的存储 二维数组 数组的创建 数组的初始化 数组的使用 数组在内存中的存储 数组名 数组名作函数参数 一维数组 数组的创建 type_t arr_name [const_n]; //type_…

Python采集豆丁网站文档数据内容, 保存word文档

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 开发环境: 版 本&#xff1a; python 3.8 编辑器&#xff1a;pycharm 2022.3.2 模块使用: requests --> pip install requests re base64 docx --> pip …

vue中的动画组件使用及如何在vue中使用animate.css

“< Transition >” 是一个内置组件&#xff0c;这意味着它在任意别的组件中都可以被使用&#xff0c;无需注册。它可以将进入和离开动画应用到通过默认插槽传递给它的元素或组件上。进入或离开可以由以下的条件之一触发&#xff1a; 由 v-if 所触发的切换由 v-show 所触…

K8S部署nginx并且使用NFS存储数据

安装NFS 在master安装NFS systemctl start nfs-server修改配置 /etc/exports /data *(rw,no_root_squash,no_all_squash,sync)目录为 /data 允许所有地址访问 验证下 [rootmaster nginx]# showmount -e 192.168.57.61 Export list for 192.168.57.61: /data *共享可以正常…

我不是DBA之慢SQL诊断方式

最近经常遇到技术开发跑来问我慢SQL优化相关工作&#xff0c;所以干脆出几篇SQL相关优化技术月报&#xff0c;我这里就以公司mysql一致的5.7版本来说明下。 在企业中慢SQL问题进场会遇到&#xff0c;尤其像我们这种ERP行业。 成熟的公司企业都会有晚上的慢SQL监控和预警机制。…

手动创建spring bean并注入

文章目录 前言一、jar包中,相同class不同类加载器加载的时候是同一个class嘛&#xff1f;二、利用ConfigurableListableBeanFactory手动注册bean注册bean,并自动注入依赖bean根据类型获取注入的bean,两个bean是一个吗? 三、同一份字节码,class隔离,bean隔离总结 前言 注入一个…

2952. 需要添加的硬币的最小数量(结论题)

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 分析知&#xff1a;设指针值从1开始依次递增&#xff0c;每次将coins里的值累加起来看能否得到或者大于当前指针值 &#xff0c;否则就将该指针值累加起来&#xff0c;即需要添加的数 class Solution …

JOSEF 单相电压继电器 WY-31A1 DC220V 过压动作,导轨安装

系列型号 单相 JY-45A1电压继电器&#xff1b;JY-45B1电压继电器&#xff1b; JY-45C1电压继电器&#xff1b;JY-45D1电压继电器&#xff1b; JY-41A1电压继电器&#xff1b;JY-41B1电压继电器&#xff1b; JY-41C1电压继电器&#xff1b;JY-41D1电压继电器&#xff1b; …

冬天来了,波司登的高端化“春天”不远了?

最近&#xff0c;羽绒服频繁“贵”上热搜。 在众多热搜词条中&#xff0c;一条“国产羽绒服卖到7000元”的话题一度将波司登推上了舆论的风口浪尖。 对此&#xff0c;波司登在最新的业绩说明会上进行了回应&#xff0c;公司表示&#xff1a;“波司登旗下主品牌及子品牌将形成差…

学习数分--简单案例1

业务背景&#xff1a;某服务类app&#xff0c;近期发现日新增用户数下滑明显。 具体描述&#xff1a;假设公司产品&#xff08;一款本地服务类app&#xff09;&#xff0c;近期发现日新增用户数下滑明显。老板要求你分析&#xff1a;数据异动的原因是什么&#xff1f; #最开始…

揭秘DeepMind、OpenAI成立内幕,马斯克、奥特曼、佩奇、哈萨比斯的爱恨情仇......

前些天OpenAI内斗的政权之争&#xff0c;相信各位看官在吃瓜的同时会感到大为震撼。OpenAI这次“政变”事件&#xff0c;让世人第一次看到那些将决定人工智能发展未来的科技大佬之间的激烈争斗。 但权利的斗争在硅谷AI激荡发展十余年中绝不是第一次。《纽约时报》为此采访了80…

VBA技术资料MF92:将多个Excel表插入Word文档的不同位置

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…

Hadoop学习笔记(HDP)-Part.12 安装HDFS

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

MATLAB|学习小提示

Part1一些小小小提示 1遇到问题怎么办 不要怕提问&#xff0c;谁都是新手过来的&#xff0c;matlab程序我是自学的从来也没人教过我&#xff0c;我不懂就百度解决的&#xff0c;作为初学者&#xff0c;你遇到的问题&#xff0c;其他人也大多遇到过&#xff0c;绝大多数百度可以…

avamar DD组合的备份故障

证书过期导致的失败 先是显示DD页面崩了 Avamar DD 集成 — DD 在 Avamar AUI/GUI 中显示红色解决方案路径 | Dell 中国 排查了一番 尝试了重启DD 然而并没用 然后尝试更新证书 页面确实起来了 但是证书还是更新失败 确定原因还是因为版本太低而宣告失败 证书更新失败 …