CGAL的3D Alpha Shapes

        假设我们给定一个二维或三维的点集S,我们希望得到类似“这些点形成的形状”的东西。这是一个相当模糊的概念,可能有许多可能的解释,阿尔法形状就是其中之一。阿尔法形状可用于从密集的无组织数据点集进行形状重建。事实上,阿尔法形状是由一个边界划分的,该边界是原始形状的线性近似。

        正如Edelsbrunner和Mücke的论文中所提到的,我们可以直观地将α形状想象成以下形状。想象一个巨大的冰淇淋块占据了空间R3,并将点作为“硬”巧克力块。使用其中一个球形冰淇淋勺,我们挖出了冰淇淋块的所有部分,我们可以在不碰到巧克力块的情况下挖出冰淇淋块的所有部分,从而甚至可以在内部挖出孔(例如,通过从外面移动勺子无法到达的部分)。我们最终会得到一个由帽、弧和点界定的(不一定是凸的)物体。如果我们现在将所有“圆形”面拉直为三角形和线段,我们就可以直观地描述所谓的S的α形状。上图提供了二维过程的一个例子(我们的冰淇淋勺只是一个圆)。

        α 形状取决于一个参数 α,之后它们被命名。 在上面的冰淇淋类比中,α 是雕刻勺的平方半径。 一个非常小的值将允许我们吃掉所有的冰淇淋,除了巧克力点本身。 因此,我们已经看到 α 形状在 α→0 时退化为点集 S。 另一方面,α 的巨大值将阻止我们甚至在两点之间移动勺子,因为它太大,我们永远不会用勺子舀起位于 S 的凸包内部的冰淇淋。 因此,α 形状在 α→∞ 时变成 S 的凸包。

        CGAL提供了2D和3D的Alpha图形。GUDHI库提供了一个dD Alpha复合体。

1、定义

        我们区分两种α形状。基本的alpha形状基于Delaunay三角剖分。加权阿尔法形状是基于它的推广,即正三角剖分(参见Section regular Triangulations),用加权点的幂代替欧氏距离。
让我们考虑Delaunay三角剖分的基本情况。

        我们首先定义了点集S的阿尔法复形。阿尔法复形是Delaunay三角测量的一个子复形。对于给定的α值,α复形包括Delaunay三角测量中的所有单形,这些单形具有平方半径等于或小于α的空外接球。这里的“空”意味着开球不包括S的任何点。阿尔法形状就是阿尔法复形的单形所覆盖的域。

        一般来说,阿尔法复形是一种不连续的非纯复形,这特别意味着阿尔法复形可能具有奇异面。对于0≤k≤d−1,如果α复形的k-单纯形不是该复形的(k+1)-单纯形的一个方面,则称其为奇异的。

        CGAL提供两种阿尔法形状。在一般模式中,阿尔法形状严格对应于上述定义。正则化模式提供阿尔法形状的正则化版本。它对应于阿尔法复形的正则化版本所覆盖的域,其中奇异面被去除。

        一般和正则阿尔法形状的比较。左:一些点取在圆环体的表面上,三个点取在离圆环体表面相对较远的地方;中间:一般的阿尔法形状(对于足够大的阿尔法值)包含三个孤立点的奇异三角形面;右:正则化版本(对于相同的alpha值)不包含任何奇异方面。 

        一组点S的α形状形成了一个离散族,即使它们是为所有实数α定义的。整个α形状族可以通过S的底层三角剖分来表示。在这种表示中,底层三角剖分的每个k-simplex与一个区间相关联,该区间指定了k-simplex属于α复体的α值。基于这一事实,α形状族可以高效且相对容易地计算。此外,我们可以选择最佳α值来获得一个包含所有数据点并且具有小于给定数量的连通分量的α形状。此外,α值允许对一组点的三角剖面的面进行过滤。在这种过滤中,三角剖面的面以α值的升序输出,这些α值出现在α复体中。在α值相等的情况下,首先输出低维面。

        在加权α形状的情况下,定义是模拟的。输入集现在是一组加权点(可以看作球体),底层三角剖分是这个集合的规则三角剖分。两个球体或两个加权点,中心C1、C2和半径r1、r2,如果C1C22=r21+r22,则称为正交,如果C1C22<r21+r22,则称为次正交。对于给定的α值,加权α复形由规则三角剖分的单形形成,使得有一个球体与单形的顶点相关的加权点正交,并与所有其他输入加权点次正交。然后,α形状被定义为α复形覆盖的域,通常有规则版本。

2、功能

2.1、Alpha形状族

        类Alpha_shape_3<Dt,ExactAlphaComparisonTag>表示给定点集的整个alpha形状家族。该类包括该集合的基础三角剖分Dt,并将该三角剖分的每个k面与一个区间相关联,该区间指定该面属于alpha复体的α值。第二个模板参数ExactAlphaComparisonTag是一个标记,当设置为CGAL标准库中的Tag_true时,会触发alpha值之间的精确比较。

        该类提供设置和获取当前α值的函数,以及枚举α值(alpha形状变化的位置)的迭代器。

        此外,该类具有一个过滤成员函数,该函数给定一个以Object为值类型的输出迭代器,当alpha增加时,根据alpha复合体中出现的顺序输出三角形的面。

        最后,它提供了一个函数来确定最小值α,使得alpha形状满足以下两个属性:

        所有数据点要么在边界上,要么在alpha形状正则化版本的内部(没有奇异面)。

        组件的数量等于或小于给定的数量。

        当前的实现是静态的,也就是说在构造后,点不能被插入或删除。

2.2、 Alpha Shape for a Fixed Alpha

        给定alpha值,类Fixed_alpha_shape_3<Dt>表示给定点集的一个alpha形状。该类包括集合的基础三角测量Dt,并将分类类型关联到该三角剖分的每个k面。此类是动态的,即在可以插入或删除其构造点之后。

2.3、分类和迭代

        这两个类都提供了成员函数,用于将三角形的不同面相对于α形状分类为EXTERIOR、SINGULAR、REGULAR或INTERIOR(给定)α值。α复形边界上的k面被称为:REGULAR,如果它是α复形的子面,α复形是α复形(k+1)面的子面,否则是SINGULAR。不在α复形边界上的α复形的k面被称为INTERIOR。二维图示见图。

         这些类还提供输出迭代器,用于为给定的alpha值获取不同类型(EXTERIOR、SINGLUAL、REGULAR或INTERIOR)的顶点、边、面和单元。

2.4、输入和输出

        可以使用运算符<<将3D alpha形状导出到std::ostream,有关更多信息,请参阅类alpha_shape_3的文档。 

3、概念与模型

        我们目前没有为基础三角剖分类型指定概念。适用于alpha形状族的模型是类Delaunay_triangulation_3和Periodic_3_Delanay_trianglation_3的实例化(请参见周期性alpha形状的示例)。适用于固定alpha形状的模型是类Delaunay_triangulation_3的实例。适用于加权阿尔法形状的模型是类Regular_triangulation_3和Periodic_3_Regular _trianguulation_3的实例化。三角剖分需要一个几何特征类和一个三角剖分数据结构作为模板参数。

3.1、 Alpha Shapes

        对于类Alpha_shape_3<Dt,ExactAlphaComparisonTag>,特征类的要求在非加权情况下的概念AlphaShape Traits_3和加权情况下的概念WeightedAlphaShape Traits_3中进行了描述。所有CGAL内核都是这两个概念的模型。

        三角剖分的三角剖分数据结构必须是概念 TriangulationDataStructure_3 的模型,其顶点和单元类是概念 AlphaShapeVertex_3 和 AlphaShapeCell_3 的模型。类 Alpha_shape_vertex_base_3<Gt> 和 Alpha_shape_cell_base_3<Gt> 是这些概念的模型,可用于所有类型的 alpha 形状,只要适当地选择模板参数 Vb 和 Fb,正如我们将在下一节中看到的那样。

3.2、固定的Alpha形状

        对于类 Fixed_alpha_shape_3<Dt>,特征类的要求在非加权情况下的概念 FixedAlphaShape Traits_3 和加权情况下的概念 FixedWeightedAlphaShape Traits_3 中进行了描述。所有 Ridge 核都是这两个概念的模型。三角剖分的三角剖分数据结构必须是概念 TriangulationDataStructure_3 的模型,其顶点和单元类是概念 FixedAlphaShapeVertex_3 和 FixedAlphaShapeCell_3 的模型。该软件包分别提供了模型 Fixed_alpha_shape_vertex_base_3<Gt> 和 Fixed_alpha_shape_cell_base_3<Gt>。

3.3、三角剖分的数据结构

        当使用加权或周期三角剖分作为基础三角剖分时,需要额外的要求:

        使用加权三角剖分(Regular_triangulation_3 或 Periodic_3_regular_triangulation_3)时,顶点和单元类必须分别是 AlphaShapeVertex_3 和 RegularTriangulationVertexBase_3 的模型,以及 AlphaShapeCell_3 和 RegularTriangulationCellBase_3 的模型。

        使用周期三角剖分(Periodic_3_Delaunay_triangulation_3 或 Periodic_3_regular_triangulation_3)时,顶点和单元类必须分别是 AlphaShapeVertex_3 和 Periodic_3TriangulationDSVertexBase_3 的模型,以及 AlphaShapeCell_3 和 Periodic_3TriangulationDSCellBase_3 的模型

4、Alpha_shape_3与Fixed_Alpha_shape_3

        类Alpha_shape_3<Dt,ExactAlphaComparisonTag>表示给定点集的整个alpha形状家族,而类Fixed_alpha_shape_3<Dt>仅表示一个alpha形状(对于固定的alpha)。

        在使用相同的内核时,Fixed_alpha_shape_3<Dt>是更轻量级的版本。因此,当需要一个特定值的alpha的alpha形状时,它自然更加高效。

        此外,请注意,类Alpha_shape_3<Dt,ExactAlphaComparisonTag>需要构造(简单x的平方半径),而类Fixed_alpha_shape_3<Dt>仅使用谓词。这意味着使用Alpha_shape_3<Dt,ExactAlphaComparisonTag>进行认证的构造(一个或多个alpha形状)需要具有精确谓词和精确构造的内核(或将ExactAlphaComparisonTag设置为Tag_true),而使用具有精确谓词的内核对于Fixed_alpha_shape_3<Dt>就足够了。

        这使得Fixed_alpha_shape_3<Dt>在这种设置下更加高效。此外,请注意,固定版本是两个中唯一支持逐点插入和删除的版本。

        我们给出在计算具有4251个原子的蛋白质(作为一组加权点)的alpha形状时花费的时间(使用gcc 4.3在Linux上,带有-O3和-DNDEBUG标志,在2.27GHz Intel(R) Xeon(R) E5520 CPU上):

        使用Exact_predicates_inexact_constructions_kernel,构建常规三角剖分需要0.09s,然后使用类Fixed_alpha_shape_3<Dt>需要0.05s,而使用类Alpha_shape_3<Dt,ExactAlphaComparisonTag>(如果ExactAlphaComparisonTag为Tag_false)需要0.35s(使用Tag_true为0.70s)。

        使用Exact_predicates_exact_constructions_kernel,构建常规三角剖分需要0.19s,然后使用类Alpha_shape_3<Dt,ExactAlphaComparisonTag>需要0.90s。

5、其他

        当许多点以阿尔法形状输入时,例如超过10000个,使用Delaunay三角剖分和Fast_location策略作为基础三角剖分可能会有回报,以加快点位置查询。

        CGAL::Alpha_shape_3 是CGAL库中的一个类,用于构建和操作α形状。α形状是一种将三维空间中的点云数据转换为多面体的数据结构,可用于进行形状分析、表面重建等任务。

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

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

相关文章

跑马灯实验

4.1 实验目的 1.熟悉龙芯实验开发板、熟悉 VIVADO 的编译环境及操作流程。 2.掌握 FPGA 编程入门知识、利用门级方法实现简单逻辑电路。 3.继续学习 Verilog HDL 语法、掌握跑马灯的设计、熟悉调试过程。 4.2 实验原理及芯片 本次实验用 Verilog HDL 语言来描述 6 个不同的 …

【Spring Security】打造安全无忧的Web应用--进阶篇

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Spring Security的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.导入相关配置 1.pom 2.ym…

redis基本用法学习(C#调用NRedisStack操作redis)

redis官网文档中推荐C#中使用NRedisStack包连接并操作redis&#xff0c;本文学习C#调用NRedisStack操作redis的基本方式。   新建Winform项目&#xff0c;在Nuget包管理器中搜索并安装NRedisStack包&#xff0c;如下图所示&#xff1a; 主要调用StackExchange.Redis命名空间下…

Navicat里放大、缩小字体的快捷方法

我是偶然误触键盘把字体缩小了&#xff0c;研究以后发现的这个快捷键&#xff0c;分享给大家。 方法&#xff1a;按住【CtrlShift】组合键&#xff0c;再拖动鼠标滚轮&#xff0c;就可以缩放字体了。 缩小效果&#xff1a; 放大效果&#xff1a;

看懂PL/SQL执行计划

看懂PL/SQL执行计划 一&#xff1a;什么是Oracle执行计划&#xff1f; 执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述 二&#xff1a;怎样查看Oracle执行计划&#xff1f; 因为我一直用的PLSQL远程连接的公司数据库&#xff0c;所以这里以PLSQL为例&#xff1…

第4章Netty第二节入门案例+channel,future,promise介绍

需求 开发一个简单的服务器端和客户端 客户端向服务器端发送 hello, world服务器仅接收&#xff0c;不返回 <dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.39.Final</version> </d…

TrustZone之可信操作系统

有许多可信内核&#xff0c;包括商业和开源的。一个例子是OP-TEE&#xff0c;最初由ST-Ericsson开发&#xff0c;但现在是由Linaro托管的开源项目。OP-TEE提供了一个功能齐全的可信执行环境&#xff0c;您可以在OP-TEE项目网站上找到详细的描述。 OP-TEE的结构如下图所示&…

通杀无限 debugger,目前只有 1% 的人知道!

前言 相信很多小伙伴在进行 web 逆向的时候&#xff0c;都遇到过无限 debugger。最简单的方法&#xff0c;在 debugger 位置&#xff0c;点击行号&#xff0c;右键 Never pause here&#xff0c;永远不在此处断下即可。但是这种方法就妄想通杀&#xff0c;显然是不大可能的&am…

电子科技大学《高级算法设计与分析》期末复习汇总

&#x1f389; 博主相信&#xff1a; 有足够的积累&#xff0c;并且一直在路上&#xff0c;就有无限的可能&#xff01;&#xff01;&#xff01; &#x1f468;‍&#x1f393;个人主页&#xff1a; 青年有志的博客 &#x1f4af; 说明&#xff1a; 本文中前大部分来自简言之大…

Ubuntu 常用命令之 sudo 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 sudo命令在Ubuntu系统中是一个非常重要的命令&#xff0c;它允许系统管理员赋予某些用户&#xff08;或用户组&#xff09;以系统管理员的身份运行一些或全部的命令。sudo代表“superuser do”&#xff0c;即以超级用户的身份执行…

SQL Server 安装教程

安装数据库 1、启动SQL Server2014安装程序&#xff0c;运行setup.exe文件&#xff0c;打开”SQL Server安装中心“对话框&#xff0c;单击左侧 的导航区域中的”安装“选项卡。 2、选择”全新SQL Server独立安装或向现有安装添加功能“&#xff0c;启动SQL Server2014安装向导…

【虹科分享】使用Allegro网络万用表进行网络分析

文章速览&#xff1a; Allegro网络万用表在公用事业公司的应用领域Allegro网络万用表 VS. WiresharkAllegro 200和Allegro 500&#xff1a;作为标准配置 传统企业成为互联网服务提供商&#xff0c;如何利用数字工具实现现代化转型&#xff1f;本期文章&#xff0c;我们分享一家…

C++初阶-模板进阶

模板进阶 一、非类型模板参数1.1 引出1.2 非类型模板参数 二、array类2.1 array类的介绍与价值2.2 array的特性2.2.1 array和vector的区别2.2.2 大小不一样2.2.3 array与vector的区别2.2.4 总结 三、模板的特化3.1 概念3.2 函数模板的特化3.3 类模板的特化3.3.1 全特化3.3.2 偏…

ansible远程操作主机功能(2)

command模块 一般用于执行Linux的命令&#xff0c;不支持管道符和重定向。 2&#xff0c;shell模块相当于command的升级版&#xff0c;也可以执行Linux命令。支持管道符和重定向 3&#xff0c;Cron在远程主机生成定时任务 分 时 日 月 周 Minute hour day month …

搅拌站智能上料系统,无人值守,均匀布撒!

搅拌站中的骨料上料系统&#xff0c;遇上最新的人工智能技术&#xff0c;会碰撞出怎样的新发展和新突破&#xff1f;今天和砼行们分享一个现场案例&#xff0c;这是思伟软件在某数字化搅拌站中的应用。 上料无人值守 后场上料配合无人地磅系统&#xff0c;仅需1名操作员在控制…

上市十年 这家互联网服务平台窥见汽车市场“沧海桑田”

十年&#xff0c;对于一家上市公司而言意味着什么&#xff1f;以中概股为例&#xff0c;十年里的高低起伏&#xff0c;折射出不同公司和行业的各异命运。 新浪在2021年私有化退市&#xff0c;曾经名声在外的聚美优品在2020年遭遇同样命运。再往前数&#xff0c;还有离开美股回…

985等高校急速开设“鸿蒙班”,引领IT就业新时代

​根据澎湃新闻记者了解到&#xff0c;华为以及鸿蒙系软件厂商都在积极培养鸿蒙开发人才。其中产学联动、产教融合来培养鸿蒙生态人才是重要的一条路径&#xff0c;目前已有 23 家 985 高校、46 家 211 高校已开设或即将开设HarmonyOS 相关课程。 其中南京大学已经将 HarmonyOS…

版本化数据库管理工具Flyway介绍和Spring Boot集成使用

文章目录 核心功能如何使用 Flyway最佳实践Spring Boot使用 Flyway 是一个版本化数据库管理工具&#xff0c;用于跟踪、管理和应用数据库的变化。它非常适合在团队开发环境中使用&#xff0c;其中多个人员可能会在数据库结构进行更改。Flyway 通过版本控制可以帮助你确保所有人…

使用MyBatis操作数据库及单元测试

目录 一.MyBatis介绍 二.MyBatis操作数据库步骤 三.单元测试 idea上生成测试 配置mybatis日志 动态参数 一.MyBatis介绍 MyBatis是⼀款优秀的持久层框架&#xff0c;⽤于简化JDBC的开发。 JDBC来操作数据库太复杂了,使用MyBatis 是因为它可以帮助我们更⽅便、更快速的操作…

判断单链表是否有环?中点如何判断?入环点如何判断?

首先我们需要克服我们一种错误的认知&#xff0c;链表有环&#xff0c;并不是有“死节”&#xff0c;如下所示&#xff0c;左侧的这种链表结构是不存在的&#xff0c;因为在相交的那个节点不可能有两个指针&#xff0c;只有像右侧这种结构才是存在的 判断链表是否有环的方法&am…