CGAL的加热法

1、介绍

        热方法是一种算法,通过返回三角形网格中所有顶点到给定源顶点集合中最近顶点的测地距离近似值,解决单源或多源最短路径问题。网格中两个顶点的测地距离是指从网格表面(可能经过面的内部)行进的距离。例如,在章鱼的两个相邻臂上,三维空间中靠近的两个顶点可能在表面上很远。在图中,我们使用渐变的红色/绿色对距离进行着色编码,对应于接近/远离源顶点。

        热方法非常高效,因为该算法简化为两个标准的稀疏线性代数问题。在需要对固定域进行重复距离查询的情况下,该方法特别有用,因为第一次查询的预计算可以重复使用。

        一般来说,该方法在Delaunay三角形网格上表现良好,尽管在实践中对于远离Delaunay的网格也可能表现良好。为了确保良好的性能,我们启用了预处理步骤,该步骤构建了内在Delaunay三角剖分(iDT);这个剖分不会改变输入几何体,但通常会提高解决方案的质量。该预处理步骤的成本大约会使总预处理成本翻倍。

        内在Delaunay三角剖分(Intrinsic Delaunay Triangulation,IDT)

在不进行iDT重网格和进行iDT重新网格的情况下放置在网格上的等值线。

        在下一节中,我们给出了一些例子。理论背景部分介绍了热方法的数学理论。最后一节是关于实施历史。

        请注意,此软件包依赖于第三方 Eigen 库(3.3 或更高版本)或概念 SparseLinearAlgebraWithFactor Traits_d 的其他模型。。

        此软件包与三角曲面网格最短路径软件包相关。两者都处理测地线距离。热方法软件包为网格的每个顶点计算到一或多个源顶点的近似距离。测地线最短路径软件包计算曲面任意两点之间的精确最短路径。 

2、理论背景

        “热方法算法”一节概述了热方法所需的理论。“内蕴Delaunay三角化”一节介绍了内蕴Delaunay三角化所需的背景。

2.1、加热法

        关于热方法的详细概述,读者可以参考[1]阅读原文。在接下来的内容中,我们将介绍一些基本概念,以便解释我们的算法。一般来说,热方法适用于任何设置,如果存在一个梯度算子,一个发散算子和一个拉普拉斯算子 Δ=∇⋅∇Δ;这是向量微积分的标准导数。

        热处理方法包括三个主要步骤:

        将热流u˙=Δu整合;在某个固定的时间 t;求向量场X=−∇ut/|∇ut|;求解泊松方程 Δϕ=∇⋅X

        函数 ϕ 是到给定源集的距离的近似值,并且随着 t 趋近于零而接近真实距离。 然后,必须通过用近似值替换空间和时间中的导数,将该算法转化为离散算法。

        热方程可以用一个向后欧拉步进行时间离散化。这意味着必须求解以下方程

        (id−tΔ)ut=δγ(x),其中δγ(x)是狄拉克δ函数,编码“无限”热尖峰(如果x在源集γ中,则为1,否则为0),其中id是单位算子。

        空间离散化取决于离散表面表示的选择。对于这个包,我们只使用三角形网格。设u∈R|V|表示一个在三角表面上的分段线性函数,该三角表面有V个顶点、E条边和F个面。在顶点i处的拉普拉斯算子的标准离散化是

        Lui=12Ai∑j(cotαij+cotβij)(uj−ui),其中Ai是所有与顶点i相交的三角形的面积的三分之一。

        该和值由所有相邻顶点 j 计算得出。此外,αij 和 βij 是与相应边 ij 对角的角度。我们通过矩阵 L=M−1Lc 表示这一操作,其中 M∈R|V|x|V| 是一个包含顶点面积的对角矩阵,Lc∈R|V|x|V| 是余切算子,表示剩余的和值。

        由此,对称正定系统(M−tLC)u=δγ可以求解,以找到u,其中δγ是γ上的克罗内克δ。
接下来,给定三角形中的梯度可以表示为

        ∇u=12Af∑iui(N×ei)

        其中 Af 是三角形的面积,N 是其外单位法线,ei 是第 i 条边向量(逆时针方向),ui 是 u 在相对顶点的值。与顶点 i 相关的积分散度可以表示为

        ∇⋅X=12∑jcotθ1(e1⋅Xj)+cotθ2(e2⋅Xj)

        其中,总和是针对每个具有向量Xj的入射三角形j求得的,e1和e2是包含i的三角形j的两个边向量,θ1和θ2是相对角。

        最后,设b∈R|V|为归一化向量场X的积分散度。因此,求解对称泊松问题Lcϕ=b可以计算出最终的距离函数。

2.2、内在Delaunay三角剖分

        cotan Laplace 算子的标准离散化使用三角形网格中角度的余切。 内在的 Delaunay 算法构造了相同多面体的三角剖分,这反过来又产生了不同的(通常更精确的)cotan Laplace 算子。从概念上讲,iDT 的边缘仍然连接原始(输入)表面上的对顶点,但现在允许沿着多面体是测地线路径,并且不必对应于输入三角剖分的边缘。这些路径不是显式存储的;相反,我们只是在三角剖分更新时跟踪它们的长度。这些长度足以确定内在三角形的面积和角度,进而确定新的 cotan Laplace 矩阵。

        如果对角之和不小于 pi,或者等价地,如果对角之余切线为非负数,则网格的边缘是局部 Delaunay。如果网格的所有边缘都是局部 Delaunay,则网格是 Delaunay。

        将给定的平面三角剖分转换为Delaunay三角剖分的标准算法是翻转网格中的非Delaunay边,直到网格为Delaunay。同样,单形表面的内在Delaunay三角剖分是通过执行内在边翻转来构造的。

        设 K=(V,E,T) 是一个二维流形三角形网格,其中 V 是顶点集,E 是边集,T 是面集(三角形集)。设 L 是欧几里得距离集,其中 L(eij)=lij=||pi−pj||,其中 pi 和 pj 分别是顶点 i 和 j 在 R3 中的位置。然后,将 (K,L)作为输入输入到 iDT 算法中,该算法返回 (K~,L~),即内在 Delaunay 网格和内在长度。该算法如下:

 for all edge e in E : Mark(e)Stack s <-- Ewhile !Empty(s) doedge(ij) = Pop(s) and Unmark(edge(ij))if !Delaunay(edge(ij)) thenedge(kl) = Flip(edge(ij)) and compute the new length length(kl) using the Cosine Theoremfor all edge e in {edge(kj), edge(jl), edge(li), edge(ik)} doif !Mark(e) thenMark(e) and Push(s,e)end ifend forend ifend while
return (~K,~L)

        然后,新的(K,L)被用来像往常一样实现热方法。

        我们在开始时已经举了一个例子,其中内禀Delaunay三角化改进了结果。网格是通过给2D三角化赋予高程而获得的,这导致了高度细长的三角形。

        这种情况类似于任何具有非常小角度面的三角形网格,如下图所示。

放置在没有iDT重新网格的网格上的等值线

 

使用iDT重新网格化放置在网格上的等值线

3、性能

        算法的时间复杂度主要由线性求解器的选择决定。在目前的实施方案中,Cholesky预系数约为O(N1.5)距离的计算大致为O(N),其中N是三角测量中的顶点数。该算法使用两个N×N
矩阵,两者都具有相同的非零模式(平均每行/列7个非零)。计算成本与源集的大小无关。基运算包括稀疏数值线性代数(双精度)和基本算术运算(包括平方根)。

        我们在英特尔酷睿i7-7700HQ 2.8HGz上执行基准测试,并使用Visual Studio 2013进行编译。

Number of trianglesInitialization iDT (sec)Distance computation iDT (sec)Initialization Direct (sec)Distance computation Direct (sec)
30,0000.180.020.120.01
200,0001.821.311.320.11
500,00010.450.758.070.55
1,800,00038.912.2435.681.1

4、其他

        CGAL::Heat_method_3::estimate_geodesic_distances 是一个用于估计三维空间中给定源集的内在测地距离的函数。它使用热方法(heat method)来求解测地距离问题。

        该函数接受一个三维三角形网格作为输入,其中每个三角形由三个顶点表示。它还接受一个源集,表示要计算测地距离的目标点集。

        函数的工作原理如下:首先,它在三角形网格上定义一个初始温度场,其中每个顶点的温度初始化为无穷大。然后,它使用向后欧拉步(backward Euler step)对热方程进行离散化,以更新温度场。在每个时间步长中,函数计算每个顶点处的梯度,并根据梯度更新温度值。随着时间的推移,温度值逐渐接近测地距离,最终收敛到稳定状态。函数返回收敛后的温度场,其中每个顶点的温度值即为该顶点到源集的测地距离。

        该函数使用了一些数学公式和概念来计算测地距离,包括拉普拉斯算子、梯度、散度和离散化等。这些公式和概念在数学和物理中有广泛的应用,特别是在计算几何和数值分析领域。

        总结:CGAL::Heat_method_3::estimate_geodesic_distances 是一个用于估计三维空间中给定源集的测地距离的函数,它使用热方法进行求解。该函数通过离散化热方程并计算梯度来逼近测地距离,最终返回收敛后的温度场作为结果。

        CGAL::Heat_method_3::Surface_mesh_geodesic_distances_3 是一个用于计算三维网格上点到源集的测地距离的函数,它使用热方法进行求解。该函数通过离散化热方程并计算梯度来逼近测地距离,最终返回收敛后的温度场作为结果。

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

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

相关文章

CodeWhisperer:编码世界中的声音启迪者

人烟 导语&#xff1a; 在数字化时代&#xff0c;编码已经成为了一种不可或缺的技能。而 CodeWhisperer&#xff08;编码世界中的声音启迪者&#xff09;则以其卓越的技术和深厚的知识为人们带来了独特的启发和指导。本文将介绍 CodeWhisperer 的背景和成就&#xff0c;探讨他是…

Centos7:Jenkins+gitlab+node项目启动(3)

Centos7&#xff1a;Jenkinsgitlabnode项目启动(1) Centos7&#xff1a;Jenkinsgitlabnode项目启动(1)-CSDN博客 Centos7&#xff1a;Jenkinsgitlabnode项目启动(2) Centos7&#xff1a;Jenkinsgitlabnode项目启动(2)-CSDN博客 Centos7&#xff1a;Jenkinsgitlabnode项目启…

sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set问题解决方案

sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set问题解决方案 当我们使用sudo su切换权限时提示错误&#xff1a; sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set该错误出现原因&#xff1a;是因为/usr/bin/sudo的权限被…

GrayLog日志平台的基本使用-ssh之Email报警

1、首先编辑并添加邮件配置到server.conf&#xff08;注意&#xff1a;是添加&#xff09; vim /etc/graylog/server/server.conf # Email transport transport_email_enabled true transport_email_hostname smtp.qq.com transport_email_port 465 transport_email_use_a…

2023启示录丨自动驾驶这一年

图片&#xff5c;《老人与海》插图 过去的20年&#xff0c;都没有2023年如此动荡。 大模型犹如一颗原子弹投入科技圈&#xff0c;卷起万里尘沙&#xff0c;传统模式瞬间被夷为平地&#xff0c;在耀眼的白光和巨大的轰鸣声之下&#xff0c;大公司、创业者、投资人甚至是每一位观…

修改文件和目录的拥有者

chown 修改文件的用户组固然重要&#xff0c;但是修改文件的拥有者可能会更常用。修改用户组使用的是chgrp命令&#xff0c;而要修改拥有者则应该使用chown命令。 $ ls -l -rw-r--r-- 1 scott scott ... libby_arrowrock.jpg -rw-r--r-- 1 scott family ... libby.jpg -rw-r--…

手把手带你死磕ORBSLAM3源代码(十七)System.cc void System::SaveDebugData类代码分析

目录 一.前言 二.代码 2.1完整代码注释分析 一.前言 这段代码是一个C++函数,其主要功能是将一些与初始化相关的数据保存为文本文件。 二.代码 2.1完整代码注释分析 // 定义一个名为SaveDebugData的函数,它接受一个整型引用参数initIdx。 void System::SaveDebugData…

C语言字符串知识点和算法总结

目录 一、字符串遍历 1、字符串和字符数组 2、获取字符串长度 3、字符串遍历 4、大小写转换 5、字符串数组 二、字符串拷贝 三、字符串比较 四、字符串分割 五、字符串翻转 1、题目详解 2、算法详解 3、源码剖析 六、回文串 1、定义 2、例题讲解 3、算法详解 …

SSM实验室设备管理----计算机毕业设计

项目介绍 本项目为后台管理系统&#xff0c;分为管理员、老师、学生三种角色&#xff1b; 管理员角色包含以下功能&#xff1a; 信息管理&#xff1a;用户管理&#xff1b; 基础管理&#xff1a;实验室管理,实验室申请记录,设备管理,设备记录管理,耗材管理,耗材记录管理等功能…

【腾讯云中间件】2023年热门文章集锦

各位读者&#xff0c;大家好&#xff01; 光阴似箭&#xff0c;日月如梭&#xff0c;仿佛冬奥会的盛况还在眼前&#xff0c;新的一年却即将到来。在过去的一年里&#xff0c;我们见证了腾讯云中间件在产品升级与创新方面的显著进步&#xff0c;包括消息队列TDMQ品牌全新升级和…

POJ 1651 Multiplication Puzzle

一、题目 1、题目描述 The multiplication puzzle is played with a row of cards, each containing a single positive integer. During the move player takes one card out of the row and scores the number of points equal to the product of the number on the card ta…

ClickHouse基础知识(五):ClickHouse的SQL 操作

基本上来说传统关系型数据库&#xff08;以 MySQL 为例&#xff09;的 SQL 语句&#xff0c;ClickHouse 基本都支持&#xff0c; 这里不会从头讲解 SQL 语法只介绍 ClickHouse 与标准 SQL&#xff08;MySQL&#xff09;不一致的地方。 1. Insert 基本与标准 SQL&#xff08;My…

windTerm 连接一段时间之后自动断开

默认是关闭会话空闲保活功能的&#xff0c;如所连接的SSH服务没做连接保活&#xff0c; 就很可能超时自动断开 开启会话保活 在 会话 -> 首选项 -> Default Session Settings -> SSH -> 连接 -> 发送空包以保持会话活动 设置15&#xff0c;即15秒自动发空包保…

kafka 有几种数据保留的策略?

kafka 有几种数据保留的策略&#xff1f; 在 Apache Kafka 中&#xff0c;有几种数据保留策略用于定义消息保存的时长和数据保留的规则。这些策略主要影响 Kafka 中的 Topic。 以下是 Kafka 中常见的数据保留策略&#xff1a; 保留时间策略&#xff08;retention.ms&#xff…

【JAVA核心知识】分布式事务框架Seata

Seata 基本信息 GitHub&#xff1a;https://github.com/seata/seatastars: 20.6k 最新版本&#xff1a; v1.6.1 Dec 22, 2022 官方文档&#xff1a;http://seata.io/zh-cn/index.html 注意 官方仅仅支持同步调用。 官方在FAQ中表示对于异步框架需要自行支持。 具体的扩展思…

2012年第一届数学建模国际赛小美赛B题大规模灭绝尚未到来解题全过程文档及程序

2012年第一届数学建模国际赛小美赛 B题 大规模灭绝尚未到来 原题再现&#xff1a; 亚马逊是地球上现存最大的雨林&#xff0c;比地球上任何地方都有更多的野生动物。它位于南美洲大陆的北侧&#xff0c;共有9个国家&#xff1a;巴西、玻利维亚、厄瓜多尔、秘鲁、哥伦比亚、委…

C# ASP.NET 实验室 检验中心 医疗LIS源码

LIS系统能够自动处理大量的医学数据&#xff0c;包括样本采集、样本处理、检测分析、报告生成等。它能够快速、准确地进行化验检测&#xff0c;提高医院的运营效率。LIS系统还提供了丰富的数据分析功能&#xff0c;能够对医院化验室的业务流程进行全面、细致的监控。 LIS系统优…

年终回顾与展望:CSDN成就之路,2023年AI浪潮展望及2024 Flag

文章目录 2023年在CSDN获得的肯定1&#xff0c;入围2023博客之星2&#xff0c;《有哪些让你目瞪口呆的Bug&#xff1f;》征文获得TOP33&#xff0c;通过创作者身份认证4&#xff0c;多篇文章被城市开发者社区收录5&#xff0c;多篇文章进入全站综合热榜6&#xff0c;积极参与社…

060:vue中markdown编辑器mavon-editor的应用示例

第060个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…

1.2 金融数据处理

跳转到根目录&#xff1a;知行合一&#xff1a;投资篇 已完成&#xff1a; 1.1 编程基础   1.1.1 投资-编程基础-numpy   1.1.2 投资-编程基础-pandas 1.2 金融数据处理 文章目录 1. 股市数据获取1.1. 使用qstock获取股票数据1.2. tushare1.3. python爬虫1.4. akshare 2. …