CGAL的3D Alpha Shapes

news2024/11/22 13:21:14

        假设我们给定一个二维或三维的点集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库中的一个类,用于构建和操作α形状。α形状是一种将三维空间中的点云数据转换为多面体的数据结构,可用于进行形状分析、表面重建等任务。

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

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

相关文章

基于比较的排序算法总结(java实现版)

目录 什么是基于比较的排序算法 什么是排序算法的稳定性 基础排序算法的稳定性 插入排序法 希尔排序法 冒泡排序法 总结 高级算法的稳定性 快速排序法 堆排序法 归并排序法 总结 注意 什么是基于比较的排序算法 基于比较的排序算法定义&#xff1a;之所以能给元素…

【银行测试】银行金融测试+金融项目测试点汇总...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、银行金融测试是…

案例101:基于微信小程序的停车共享小程序

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

微信小程序 动态设置状态栏样式

onLoad(options) {//修改状态栏标题wx.setNavigationBarTitle({title: 页面标题, //页面标题success: () > {}, //接口调用成功的回调函数fail: () > {}, //接口调用失败的回调函数complete: () > {} //接口调用结束的回调函数&#xff08;调用成功、失败…

CentOS 7 Tomcat服务的安装

前提 安装ava https://blog.csdn.net/qq_36940806/article/details/134945175?spm1001.2014.3001.5501 1. 下载 wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.84/bin/apache-tomcat-9.0.84.tar.gzps: 可选择自己需要的版本下载安装https://mirr…

Centos7在安装Graylog时新安装MongoDB报错端口不监听服务不启动无法运行启动失败

由于虚拟机服务器上需要安装Graylog需要安装MongoDB&#xff0c;尝试官网下载安装包&#xff0c;和yum安装均无法正常启动&#xff0c;折腾了好几天&#xff0c;重装了十几次&#xff0c;网上搜索了很多很多资料&#xff0c;均无法正常运行&#xff0c;百度上搜索各种文档&…

python三大开发框架django、 flask 和 fastapi 对比

本文讲述了什么启发了 FastAPI 的诞生&#xff0c;它与其他替代框架的对比&#xff0c;以及从中汲取的经验。 如果不是基于前人的成果&#xff0c;FastAPI 将不会存在。在 FastAPI 之前&#xff0c;前人已经创建了许多工具 。 几年来&#xff0c;我一直在避免创建新框架。首先&…

【python笔记】并发编程

前言 菜某的笔记总结分享。有错误请指正。 并发编程的意义 并发编程是用来提升代码执行的效率的。 名词理解 进程和线程 我们可以这样理解进程和线程。进程是一个工厂&#xff0c;线程是工厂里的一条流水线。 我们要让我们产品的生产效率提高&#xff0c;我们可以多开工…

基于多反应堆的高并发服务器【C/C++/Reactor】(上)

&#xff08;一&#xff09;初始化服务器端用于监听的套接字 Server.h #pragma once // 初始化监听的套接字 int initListenFd(unsigned short port); Server.c int initListenFd(unsigned short port) {// 1.创建监听的fdint lfd socket(AF_INET, SOCK_STREAM, 0);if(lf…

HTTP:HTTP报文

HTTP&#xff1a;HTTP报文 1. 报文流1.1 报文流入源端服务器1.2 报文向下游流动1.3 报文的组成部分1.3.1 报文的语法1.3.2 起始行1. 请求行2. 响应行3. 方法4. 状态码 如果说HTTP是因特网的信使&#xff0c;那么HTTP报文就是用它来搬东西的包裹了。 1. 报文流 HTTP报文是在…

最新国内免费使用GPT4教程,GPT语音对话使用,Midjourney绘画

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画&#xff0c;相信对大家应该不感到陌生吧&#xff1f;简单来说&#xff0c;GPT-4技术比之前的GPT-3.5相对来说更加智能&#xff0c;会根据用户的要求生成多种内容甚至也可以和用户进行创作交流。 然而&#xff0c;GP…

PHP字符串解析特性绕过WAF

[RoarCTF 2019]Easy Calc 题目的突破点&#xff1a; 只能传入数字和运算符号&#xff0c;不能传入字符&#xff08;想办法绕过waf&#xff09; 方法1. php解析规则&#xff1a;当php进行解析时&#xff0c;如果变量名前面有空格&#xff0c;php会自动去掉前面的空格再进行…

轻松搭建知识付费小程序:让知识传播更便捷

明理信息科技saas知识付费平台 在当今数字化时代&#xff0c;知识付费已经成为一种趋势&#xff0c;越来越多的人愿意为有价值的知识付费。然而&#xff0c;公共知识付费平台虽然内容丰富&#xff0c;但难以满足个人或企业个性化的需求和品牌打造。同时&#xff0c;开发和维护…

打破Tomcat中的双亲委派机制:探讨与实践

目录 引言 1. 双亲委派机制概述 2. 打破双亲委派机制的场景 3. Tomcat中的类加载器体系 4. 打破双亲委派机制的方法 4.1 在catalina.properties中配置common.loader 4.2 在META-INF/context.xml中配置Loader元素 4.3 编写自定义的类加载器 5. 潜在的问题与解决方案 5…

Shell编程自动化之特殊Shell扩展变量

1.变量的处理 1.1 如果parameter变量值为空&#xff0c;那么返回str字符串。 ${parameter:-str} 1.2 如果parameter变量值为空&#xff0c;那么str替代变量值&#xff0c;且返回其值。 ${parameter:str} 1.3 如果parameter变量值为空&#xff0c;那么str当作stderr输出&am…

Django 简单图书管理系统

一、图书需求 1. 书籍book_index.html中有超链接&#xff1a;查看所有的书籍列表book_list.html页面 2. 书籍book_list.html中显示所有的书名&#xff0c;有超链接&#xff1a;查看本书籍详情book_detail.html(通过书籍ID)页面 3. 书籍book_detail.html中书的作者和出版社&…

现代雷达车载应用——第3章 MIMO雷达技术 3.2节 汽车MIMO雷达波形正交策略

经典著作&#xff0c;值得一读&#xff0c;英文原版下载链接【免费】ModernRadarforAutomotiveApplications资源-CSDN文库。 3.2 汽车MIMO雷达波形正交策略 基于MIMO雷达技术的汽车雷达虚拟阵列合成依赖于不同天线发射信号的可分离性。当不同天线的发射信号正交时&#x…

德人合科技 | 设计公司文件加密系统——天锐绿盾自动智能透明加密防泄密系统

设计公司文件加密系统——天锐绿盾自动智能透明加密防泄密系统 PC端访问地址&#xff1a; www.drhchina.com 一、背景介绍 设计公司通常涉及到大量的创意作品、设计方案、客户资料等重要文件&#xff0c;这些文件往往包含公司的核心价值和商业机密。因此&#xff0c;如何确保…

百年东芝“瞄准”汽车「芯」机遇

在汽车“新四化”大变革的驱动下&#xff0c;汽车半导体市场进入需求暴涨的新周期。 “智能电动汽车所需要的半导体种类和数量正在急剧增加。” 东芝电子分立器件应用技术部经理成栋表示&#xff0c;东芝电子正在加大汽车半导体市场的布局&#xff0c;从而满足汽车电动化、智能…

[node]Node.js 中REPL简单介绍

[node]Node.js 中REPL简单介绍 什么是REPL为什么使用REPL如何使用REPL 命令REPL模式node的全局内容展示node全局所有模块查看全局模块具体内容其它命令 实践 什么是REPL Node.js REPL(Read Eval Print Loop:交互式解释器) 表示电脑的环境&#xff0c;类似 Windows 系统的终端或…