CGAL的三维曲面网格生成

 1、介绍

        此程序包提供了一个函数模板,用于计算三角网格,以近似表面。

        网格化算法要求仅通过一个能够判断给定线段、直线或射线是否与曲面相交,并且如果相交则计算交点的oracle来了解待网格化的表面。这一特性使该软件包具有足够的通用性,可以应用于各种情况。例如,它可以用于网格化隐式曲面,如某些函数的零水平集。它也可以用于医学成像领域,网格化三维图像中的灰度级集曲面。

        网格化算法基于受限的Delaunay三角剖分概念。该算法基本上是在曲面上计算一组采样点,并从这些采样点的三维三角剖分中提取插值曲面网格。与Delaunay细化过程一样,迭代地将点添加到采样中,直到满足曲面网格元素的一些尺寸和形状标准。

        尺寸和形状标准指导细化过程的行为并控制其终止。它们还决定了最终网格中元素的大小和形状。自然地,这些标准可以定制以满足用户需求。曲面网格生成包提供了一组可以通过三个数值进行缩放的标准。此外,用户还可以插入自己的一组细化标准。

        如果用户能够在每个连接的组件上提供一个初始采样点,则对表面的拓扑和组件数量没有限制。如果表面足够光滑,并且尺寸标准足够小,则算法保证输出网格与表面同胚,并且与表面之间的距离很小(豪斯多夫距离甚至弗雷歇距离)。该算法也可用于非光滑表面,但无法保证。

2、用于光滑曲面的曲面网格生成器接口

        网格划分过程是通过调用函数模板来启动的。网格划分函数有两种重载版本,其特征如下: 

template <class SurfaceMeshC2T3,class Surface,class FacetsCriteria,class Tag >
void make_surface_mesh(SurfaceMeshC2T3& c2t3,Surface surface,FacetsCriteria criteria,Tag);
template< class SurfaceMeshC2T3,class SurfaceMeshTraits,class FacetsCriteria,class Tag >
void make_surface_mesh(SurfaceMeshC2T3& c2t3,SurfaceMeshTraits::Surface_3 surface,SurfaceMeshTraits traits,FacetsCriteria criteria,Tag );

         模板参数 SurfaceMeshC2T3 表示用于存储表面网格的数据结构类型。此类型需要是概念 SurfaceMeshComplex_2InTriangulation_3 的模型。此类数据结构具有指向三维三角剖分的指针,并将表面网格编码为此三角剖分中面的子集。类型 SurfaceMeshC2T3 的参数通过引用传递给网格化函数。此参数在过程结束时保存输出网格。

        模板参数 Surface 表示表面类型。该类型必须是概念 Surface_3 的模型。

        表面网格生成器所需的表面知识被封装在一个 traits 类中。实际上,网格生成器仅通过此 traits 类访问要网格化的表面。traits 类需要是概念 SurfaceMesh_Traits_3 的模型。 make_surface_mesh() 的两个重载版本之间的区别可以解释如下

        在 make_surface_mesh() 的第一个重载版本中,表面类型作为模板参数给出,要网格化的表面作为参数传递给网格生成器。在这种情况下,表面网格生成器特征类型由一个名为 Surface_mesh_traits_generator_3 的辅助类从表面类型自动生成。

        在 make_surface_mesh() 的第二个重载版本中,表面网格生成器特征类型由模板参数 SurfaceMeshTraits_3 提供,表面类型从此特征类型获得。表面和特征都作为参数传递给网格生成器。

        当表面类型提供嵌套类型 Surface::Surface_mesher_traits_3 作为 SurfaceMesh Traits_3 的模型,或者提供 traits 生成器 Surface_mesh_traits_generator_3<Surface> 的特化的表面类型时,可以使用第一个重载版本。目前,该库为隐式表面(Implicit_surface_3<Traits, Function>)和灰度图像(Gray_level_image_3<FT, Point>)提供了 Surface_mesh_traits_generator_3<Surface> 的部分特化。

        参数标准处理驱动网格划分过程的大小和形状标准的描述。模板参数FacetsCriteria必须由概念SurfaceMeshFacetsCriteria_3的模型实例化。

        参数Tag是一个标签,其类型会影响网格算法的行为。例如,此参数可用于强制输出网格的流形属性,同时避免网格的过度细化。

        调用 make_surface_mesh(c2t3,surface, criteria, tag) 会启动网格化过程,并使用一组初始点,该组初始点是两个子集的并集:c2t3 指向的初始三角剖分中的顶点集,以及 traits 类的 Construct_initial_points() 函子提供的一组点。该初始点集需要包含要网格化的曲面的每个连通分量上的至少一个点。

3、输入输出

        使用函数 CGAL::output_surface_facets_to_off()可以将表面网格输出为OFF格式。

4、网格生成标准、保证、变化

        输出网格的保证取决于网格标准。首先,如果面角度的下限不大于30度,则证明网格算法终止。此外,输出网格保证与表面同胚,并且如果半径范围处处小于\(\epsilon)倍局部特征尺寸,则网格和表面之间的距离(豪斯多夫距离甚至弗雷歇距离)有保证的范围。这里\(\epsilon)是一个必须小于0.16的常数,局部特征尺寸\(\mathrm{lfs}(x)\)在表面的每个点\(x\)上定义为从\(x\)到中轴的距离。请注意,半径范围不需要是均匀的,尽管在默认标准中是均匀的。

        当然,这样的理论保证只能针对具有有限非零到达值的平滑表面来实现。(表面的到达值是该表面上局部特征尺寸的最小值)。

        曲面任何点上的局部特征尺寸值或曲面上的最小值通常是未知的,尽管有时可以猜测。此外,经常发生的情况是,设置网格标准以满足理论条件会产生过度细化的网格。另一方面,当尺寸标准放宽时,不能保证与输入曲面具有同胚性,并且不能保证输出网格是流形。为了解决这个问题,并给出更灵活的网格算法,函数模板 make_surface_mesh() 有一个标记模板参数,可以稍微改变细化过程的行为。这个功能允许,例如,使用放宽的尺寸标准运行网格算法,与用户期望的网格尺寸更加一致,并且仍然保证输出网格形成流形表面。函数 make_surface_mesh() 具有以下标记类型的专用版本:Manifold_tag:输出网格保证为无边界的流形曲面。Manifold_with_boundary_tag:输出网格保证是流形,但可能有边界。Non_manifold_tag:该算法依赖于给定的标准,并且不保证其他任何东西。

5、输出

        该CGAL组件还提供将重建的曲面网格写入对象文件格式(OFF)[2]并将其转换为FaceGraph(当它是流形时)的功能:output_surface_facets_to_off();output_surface_facets_to_polyhedron();facets_in_complex_2_to_triangle_mesh()。

CGAL 5.6 - 3D Surface Mesh Generation: User Manual

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows11 phpstudy_pro php8.2 安装redis扩展

环境&#xff1a;windows11 phpstudy_pro php8.2.9 一、命令查看是否安装redis扩展 在对应网站中通过打开&#xff0c;&#xff0c;选择对应的PHP版本&#xff0c;用命令 php -m 查看自己的php 有没有redis扩展 上面如果有&#xff0c;说明已经安装了,如果没有安装&#xff1…

小米智能摄像头mp4多碎片手工恢复案例

小米智能摄像头mp4多碎片手工恢复案例 智能摄像头目前在市场上极为常见&#xff0c;仅需要一张存储卡即可实现视频、音频的采集&#xff0c;同时可以通过手机APP进行远程控制&#xff0c;相比传统安防品牌成本更低、更容易部署。在智能摄像头品牌中小米算是绝对的大厂&#xf…

道可云会展元宇宙平台全新升级,打造3D沉浸式展会新模式

随着VR虚拟现实、人工智能、虚拟数字人等元宇宙技术的快速发展&#xff0c;各个行业正试图通过元宇宙技术寻求新的发展突破口&#xff0c;会展行业也不例外。会展作为经贸领域的重要产业形态&#xff0c;越来越多的企业和组织开始寻求通过元宇宙技术为展会赋能&#xff0c;以满…

numpy知识库:深入理解numpy的repeat函数和numpy数组的repeat方法

前言 numpy中的repeat函数顾名思义&#xff0c;可以将给定的数组沿着指定的轴重复多次&#xff0c;生成一个新的数组。但具体如何重复呢&#xff1f;本次博文就来探讨并试图回答这个问题&#xff0c;感兴趣的小伙伴可以继续阅读下去&#xff0c;希望对你有所启示~ numpy中的r…

从0开始学习JavaScript--JavaScript ES6 模块系统

JavaScript ES6&#xff08;ECMAScript 2015&#xff09;引入了官方支持的模块系统&#xff0c;使得前端开发更加现代化和模块化。本文将深入探讨 ES6 模块系统的各个方面&#xff0c;通过丰富的示例代码详细展示其核心概念和实际应用。 ES6 模块的基本概念 1 模块的导出 ES…

docker踩坑记录:docker容器创建doris容器间无法通讯问题

背景&#xff1a; 开发大数据平台&#xff0c;使用doris作为数据仓储&#xff0c;使用docker做集群部署&#xff0c;先进行开发环境搭建&#xff0c;环境为BE1;FE1&#xff0c;原来使用官方例子&#xff0c;但是官方例子是创建了一个bridge使用172.20.80.0/24通讯&#xff0c;…

Matlab R2022b 安装成功小记

Matlab R2022b 安装成功小记 前言一、 下载链接二、 安装过程小记 叮嘟&#xff01;这里是小啊呜的学习课程资料整理。好记性不如烂笔头&#xff0c;今天也是努力进步的一天。一起加油进阶吧&#xff01; 前言 windows 10系统之前安装过Matlab R2010b做基础研究&#xff0c;最…

解读免费化潮流:为何数据可视化软件向免费迈进?

近年来&#xff0c;我们见证了数据可视化软件呈现出明显的免费化趋势。这个趋势的背后隐藏着许多关键原因&#xff0c;影响着整个数据行业的发展和走向。为何数据可视化软件开始朝着免费方向发展&#xff1f;让我们一同深入探讨。 普及数字化需求&#xff1a; 数字化已经深入到…

canvas基础:渲染文本

canvas实例应用100 专栏提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。 canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重要的帮助。 文章目录 示例…

Android12之logcat日志显示颜色和时间(一百六十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

Spring Cloud 版本升级记:OpenFeignClient与Gateway的爱恨交织

Spring Cloud 版本升级记&#xff1a;OpenFeignClient与Gateway的爱恨交织 近日&#xff0c;在负责的项目中&#xff0c;我对 Spring Boot、Spring Cloud 以及 Spring Cloud Alibaba 进行了版本升级。原以为会一切顺利&#xff0c;没想到却遭遇了 Spring Cloud Gateway 无法正…

.NET6实现破解Modbus poll点表配置文件

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,我们面对的不仅仅是技术还有人心,人心不可测,海水不可量,唯有技术,才是深沉黑夜中的一座闪烁的灯塔 !序言 Modbus 协议是工控领域常见…

数据结构--->单链表

文章目录 链表链表的分类 单链表单链表的存储结构单链表主要实现的接口函数单链表尾插动态申请新节点单链表头插单链表的尾删单链表的头删在指定位置之前插入单链表查找插入 在指定位置之后插删除指定位置元素删除指定位置之后的元素顺序输出链表销毁单链表 顺序表和单链表的区…

Seaborn图形可视化基础_Python数据分析与可视化

Seaborn图形可视化基础 Seaborn可视化Seaborn与Matplotlib Seaborn可视化 即使matplotlib已经如此强大了&#xff0c;但是不得不承认它不支持的功能还有很多。 例如&#xff1a; 2.0之前的版本的默认配置样式绝对不是用户的最佳选择&#xff1b; matplotlib的API比较底层。虽…

VSC++: 双进制回文

缘由双进制回文数&#xff0c;一道C程序题&#xff0c;求解&#xff01;&#xff01;&#xff01;&#xff1f;_编程语言-CSDN问答 int 合成100回文(int 数) { int 合 0, 倒 数>10 && 数 < 100 ? 数 / 10 : 数;while (倒)合 * 10, 合 倒 % 10, 倒 / 10, (合…

力扣232-用栈实现队列

文章目录 力扣232-用栈实现队列示例代码实现总结收获 力扣232-用栈实现队列 示例 代码实现 class MyQueue {Deque<Integer> instack;Deque<Integer> outstack ;public MyQueue() {instacknew ArrayDeque<Integer>();outstacknew ArrayDeque<Integer>(…

zabbix监控

非常成熟的监控软件. 运维人员&#xff0c;监控系统服务器的状态&#xff0c;网站流量&#xff0c;进程服务的运行状态。保证整个集群的工作正常。 zabbix是什么&#xff1f; zabbix是基于web页面提供的一种可视化的监控服务软件。以分布式的方式涉及系统监控、网络监控、硬…

Flutter应用程序的加固原理

在移动应用开发中&#xff0c;Flutter已经成为一种非常流行的技术选项&#xff0c;可以同时在Android和iOS平台上构建高性能、高质量的移动应用程序。但是&#xff0c;由于其跨平台特性&#xff0c;Flutter应用程序也面临着一些安全风险&#xff0c;例如反编译、代码泄露、数据…

关于前端的学习思考-父子盒子溢出问题

先摆图片 很明显&#xff0c;大盒子高度设置400px&#xff0c;小盒子都是高度设置成300px&#xff0c;明显400px<600px&#xff0c;这时候子盒子就会溢出。如何解决溢出问题&#xff1f; 这个时候我把子盒子换成50%&#xff0c;50%。发现并不会溢出&#xff0c;因为相当于两…

Java-easyExcel入门教程

文章目录 前言一、简介二、使用步骤1. 引入依赖2. 前提准备3. 实现导出4. 实现导入 三、我所遇到的问题四、总结 前言 在日常开发中经常会遇到一些 excel 表导入导出的需求&#xff0c;以往会使用 POI 封装成工具类来处理这些导入导出的需求&#xff0c;但是 POI 在导入大文件…