CGAL的空间排序

1、介绍

        许多在CGAL中实现的几何算法都是增量的,因此它们的速度取决于插入顺序。此软件包提供了排序算法,可以大大提高此类算法的运行时间。

        其基本原理是沿着空间填充曲线对对象进行排序,这样在插入顺序上,几何上接近的两个对象将很有可能接近。这样,在插入过程中将要查看的数据结构的一部分很可能已经在最近的插入中被查看过,因此很可能在缓存内存中而不是主内存中。作为另一个副作用,这些排序函数通常会提高增量算法产生的数据结构的内存局部性,有时会导致使用这些数据结构的其他算法的速度加快。

        一些算法在随机假设下具有很好的复杂性,这与使用任何排序标准对输入进行排序的想法相矛盾。在这种情况下,可以引入一点随机性,以结合良好的随机复杂性和良好的局部性效果。

        此包使用的谓词是坐标之间的比较,因此这里没有涉及鲁棒性问题,例如选择内核的算法。

2、希尔伯特排序

        在二维中,可以构造空间填充曲线,即从[0,1]到单位正方形[0,1]的映射f,使得f(0)=(0,0)和f(1)=(1,0),具体方式如下:将单位正方形细分为四个正方形,使得

         然后,每个方块以同样的方式递归细分。下图说明了这一过程。

 希尔伯特映射

        现在给定一组二维点,它们可以在这样的空间填充曲线上按顺序排列。请注意,在每一步中,我们都在正中间将一个正方形分割开;我们称之为中间策略。

         如果不像上面那样在中心以固定方式对正方形进行细分,而是在中点(在x或y方向交替)进行分割,我们构建了一个适应点集的二维树。该树可以以类似的方式进行访问,我们也可以得到点的适当排序;我们称之为中点策略。

         中间策略更容易分析,并且在点集在低维度中分布良好的情况下(如果点的数量真的大于2d)在实践中很有趣。对于高维度或点集分布不规律(或未知)的情况,应首选中位数策略。由于中位数策略不会比中间策略差很多,而相反的情况可能会发生,因此中位数策略是默认行为。大多数理论结果使用中间策略。

        CGAL为二维、三维和更高维度的点提供希尔伯特排序,采用中间和中位数策略。

        我们还考虑给定球上的空间填充曲线。该方法适用于单位球,通过仿射变换适用于任何球体。假设要排序的点靠近球体。

        实际上,我们在单位球上近似一个空间填充曲线,通过在立方体(面在x、y、z=±1/3–√处)上填充空间填充曲线。大致来说,我们将原始点集分成六个子集,对应于立方体的六个面。对应于面f的子集是位于由面f的支撑平面定义的一半空间内的点集,该平面不包含原点。

        然后,我们基本上在每个子集上使用2D希尔伯特排序及其相应的策略,就像上面解释的那样,将点的投影投射到立方体的相应面上。每个面上的轴方向选择使得空间填充曲线覆盖整个立方体而不会跳跃;参见图4。一个点可以位于多个这样的半平面中,因此我们为立方体的每个面赋予优先级。优先级顺序是:首先,立方体在x=1/3–√的面;其次,立方体在y=1/3–√的面;第三,立方体在x=−1/3–√的面;第四,立方体在z=1/3–√的面;第五,立方体在y=−1/3–√的面;第六,立方体在z=−1/3–√的面。

        如果点不靠近球体,它们仍然以相同的方式排序,但不能保证这样的顺序不再有效。

立方体每个面的二维希尔伯特排序

        根据上述描述在球体上排序的点如图所示。 

球上的Hilbert排序

3、空间排序

        在将随机算法输入之前,不能直接使用希尔伯特排序。因此,诀窍是将点集组织在大小递增的随机桶中,希尔伯特排序仅在桶内使用。

        在Delaunay三角剖分的背景下,已经证明这种顺序提供了足够的随机性,可以结合随机顺序和空间填充曲线顺序的优点。

        CGAL库提供二维、三维和更高维度的点空间排序,在桶中采用 Hilbert 排序的中间和中间值策略。

        空间排序特征类提供了点类型和函子,用于比较例如两个点的x坐标。如果你想对点以外的东西进行排序,例如包含一个点的元组序列,或者点向量中的索引序列,你需要另一个间接级别。CGAL提供了由另一个空间排序特征类模板化的空间排序特征类别适配器和属性映射。这允许从你想要排序的任何东西中获得一个点。

4、并行空间排序

        在二维(三维)中,希尔伯特或空间排序递归地将输入范围细分为四个(八个)子范围。因此,并行化排序算法的一个自然方法是将初始范围细分为四个(八个)子范围,并让单个线程处理给定子范围的任何进一步细分和排序。这种并行算法仅在使用中位数策略策略时可用(默认情况下是这样),因为该策略确保了所有子范围之间的平衡。对于中间策略,情况不一定如此,其中子范围大小可能差异很大。

        通过指定模板参数CGAL::Parallel_tag启用算法的并行版本。如果不确定TBB是否可用且已与CGAL链接,则可以使用CGAL::Parallel_if_available_tag。默认情况下,使用顺序版本。

5、其他

        空间排序可以降低,三角剖分的时间

        希尔伯特排序和空间排序是两种不同的概念,它们分别用于不同的应用场景,并且各自有不同的特性和目标。

        希尔伯特排序是一种排序算法,主要用于对数字进行排序。它利用了递减增量的策略,将序列划分为一个个小序列,每个小序列使用直接插入排序,完成后增量递减,每个小序列变大,继续进行直接插入排序,直到增量递减为1,进行最后的直接插入排序。希尔伯特排序的主要思想是利用直接插入排序的优点和消灭直接插入排序的缺点来进行排序。

        空间顺序是指在三维空间中,事物的位置排列和分布的方式。它是通过观察和感知事物在空间中的相对位置和关系而形成的。空间顺序不仅仅涉及物体的位置,还包括它们的大小、形状和颜色等属性。在建筑设计、城市规划、艺术创作等应用中,空间顺序是一个关键概念。它涉及到建筑物内部和外部空间的组织和布局,以及不同空间之间的联系和转换。通过合理的空间顺序设计,可以创造出舒适、高效的使用环境,提升建筑物的功能性和美学价值。

        因此,希尔伯特排序是一种算法,主要用于数字排序;而空间顺序是一个描述物体在空间中的位置和关系的概念,广泛应用于建筑设计、城市规划等领域。

        CGAL::hilbert_sort是CGAL库中的一个函数,用于对点集进行Hilbert排序。Hilbert排序是一种基于Hilbert曲线的方法,用于对二维平面上的点进行排序。

        CGAL::hilbert_sort_on_sphere是CGAL库中的一个函数,用于在球面上进行Hilbert排序。

        Hilbert排序是一种基于Hilbert曲线的方法,用于对球面上的点进行排序。球面上的点可以用它们的经度和纬度来表示。CGAL::hilbert_sort_on_sphere函数使用Hilbert曲线对球面上的点进行排序,使得在排序后的结果中,相邻的点在球面上具有尽可能大的角度差。

        使用CGAL::hilbert_sort_on_sphere函数的一般步骤如下:

  1. 创建一个球面上的点集,每个点由其经度和纬度表示。
  2. 调用CGAL::hilbert_sort_on_sphere函数,并将点集作为参数传递给它。
  3. 函数会对点集进行排序,并返回排序后的结果。

        通过使用CGAL::hilbert_sort_on_sphere函数,可以对球面上的点进行有效的排序,这在处理地理信息系统、地图绘制、空间索引等应用中非常有用。

        CGAL::hilbert_sort是一个用于对球面上的点进行排序的函数,它使用Hilbert曲线进行排序。关于中间策略和中点策略的区别,可以从以下几个方面进行比较:

  1. 定义:

    • 中间策略:在排序过程中,将元素分成两部分,中间元素作为基准,然后将其他元素与基准进行比较和交换。
    • 中点策略:在排序过程中,将元素分成两部分,中间位置(中位数)的元素作为基准,然后将其他元素与基准进行比较和交换。
  2. 算法复杂度:

    • 中间策略:由于需要选择一个中间元素作为基准,因此算法复杂度较高。
    • 中点策略:由于只需要找到中间位置的元素作为基准,算法复杂度较低。
  3. 稳定性:

    • 中间策略:不稳定,因为中间元素的选择可能会影响排序结果。
    • 中点策略:稳定,因为中位数是唯一确定的基准元素。
  4. 适用场景:

    • 中间策略:适用于快速排序、堆排序等基于比较的排序算法。
    • 中点策略:适用于快速选择、归并排序等基于比较和合并的排序算法。

        总结:中间策略和中点策略的区别主要在于选择基准元素的方式不同。中间策略选择一个中间元素作为基准,而中点策略选择中位数作为基准。在算法复杂度、稳定性和适用场景方面也存在差异。在实际应用中,可以根据具体需求选择适合的策略。

        CGAL::spatial_sort是CGAL库中的一个函数,用于对几何对象进行空间排序。该函数可以用于对点、线段、多边形等几何对象进行排序,以便在几何计算中按照特定的顺序处理这些对象。

        CGAL::spatial_sort函数基于四叉树数据结构,它可以在高维空间中高效地进行排序。通过将空间划分为四个象限,然后递归地对每个象限进行排序,该函数能够快速地确定对象的相对位置关系。

        CGAL::spatial_sort和CGAL::hilbert_sort是CGAL库中的两个不同函数,它们用于不同的排序目的。

        CGAL::spatial_sort是一个用于对几何对象进行空间排序的函数。它基于四叉树数据结构,可以将空间划分为四个象限,然后递归地对每个象限进行排序。空间排序的目的是确定对象的相对位置关系,以便在几何计算中按照特定的顺序处理这些对象。

        而CGAL::hilbert_sort是一个用于对球面上的点进行排序的函数,它使用Hilbert曲线进行排序。Hilbert曲线是一种将二维平面上的点按照顺序映射到一条曲线上的方法,使得相邻的点在曲线上具有尽可能大的角度差。球面上的点可以用它们的经度和纬度来表示,因此CGAL::hilbert_sort可以用于对球面上的点进行排序。

        总结:CGAL::spatial_sort和CGAL::hilbert_sort的区别在于它们的排序目的和应用场景不同。CGAL::spatial_sort用于对几何对象进行空间排序,而CGAL::hilbert_sort用于对球面上的点进行排序。在实际应用中,需要根据具体需求选择适合的排序函数。

CGAL 5.6 - Spatial Sorting: User Manual

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

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

相关文章

详解协方差矩阵,相关矩阵,互协方差矩阵(附完整例题分析)【2】

目录 一. 写在前面 二. 相关矩阵(Correlation Matrix) 三. 实战分析 例题1 (1)均值的关系 (2)协方差的关系 (3)小结 例题2 小结 四. 补充 一. 写在前面 有关协方差矩阵和…

学习Vue单文件组件总结

今天主要学习了组件实例对象的一个重要内置关系和单文件组件。先说一下实例对象的内置关系,在这里要对JS中的原型链有一定的基础,Vue构造函数的prototype原型指向的是Vue的原型对象,new出来的Vue实例对__proto__同样指向的是Vue的原型对象&am…

云计算复习提纲

第一章 大数据的概念:海量数据的规模巨大到无法通过目前主流的计算机系统在合理时间内获取、存储、管理、处理并提炼以帮助使用者决策 大数据的特点:①数据量大,存储的数据量巨大,PB级别是常态;②多样,数…

Friedman检验及后续Nemenyi检验可视化

文章目录 Friedman 检验Nemeny检验 合作推广,分享一个人工智能学习网站。计划系统性学习的同学可以了解下,点击助力博主脱贫( •̀ ω •́ )✧ Friedman 检验 弗里德曼检验(Friedman test)是一种非参数统计检验方法,用…

OSG读取和添加节点学习

之前加载了一个模型,代码是, osg::Group* root new osg::Group(); osg::Node* node new osg::Node(); node osgDB::readNodeFile("tree.osg"); root->addChild(node); root是指向osg::Group的指针; node是 osg:…

[笔记] GICv3/v4 ITS 与 LPI

0. 写在前面 由于移植一个 pcie 设备驱动时,需要处理该 pcie 设备的 msi 中断(message signaled interrup)。 在 ARM 中, ARM 建议 msi 中断实现方式为: pcie 设备往 cpu 的一段特殊内存(寄存器)写某一个值&#xff0…

ASM-HEMT射频建模

关于ASM-HEMT RF模型 ASM-HEMT是指用于氮化镓高迁移率电子晶体管的先进SPICE模型。该模型于2018年由紧凑模型委员会(CMC)进行了标准化。 ASM-HEMT模型涵盖了氮化镓器件在射频(RF)和功率电子应用中的应用。模型手册提供了模型方程…

AI提示词入门教程

AI提示词的基本原则与技巧 文章目录 AI提示词的基本原则与技巧前言原则1: 尽可能保证下达的指令“清晰、没有歧义”使用分隔符清楚地指示输入地不同部分要求结构化地输出让模型检查是否满足条件少样本提示 原则2:给AI思考的时间,以及完成任务…

2.3_5 信号量机制

2.3_5 信号量机制 用户进程可以通过使用操作系统提供的一对原语来对信号量进行操作,从而很方便的实现了进程互斥、进程同步。 信号量其实就是一个变量(可以是一个整数,也可以是更复杂的记录型变量),可以用一个信号量来表示系统中某种资源的数量,比如:系统中只有一台打印机,就…

【LLM 】7个基本的NLP模型,为ML应用程序赋能

在上一篇文章中,我们已经解释了什么是NLP及其在现实世界中的应用。在这篇文章中,我们将继续介绍NLP应用程序中使用的一些主要深度学习模型。 BERT 来自变压器的双向编码器表示(BERT)由Jacob Devlin在2018年的论文《BERT:用于语言…

前缀和算法 -- [模版]一维前缀和

个人主页:Lei宝啊 愿所有美好如期而遇 目录 本题链接 输入描述 输出描述 算法分析 算法一:暴力求解 算法二:前缀和 预处理前缀和dp表 使用前缀和dp表 解题源码 我们以一道题目为例详解一维前缀和原理。 本题链接 【模板】前缀和…

DICOM医学图像浏览器

各位医疗IT的小伙伴们大家好,近期打算换一份工作,于是利用业余时间,结合自己的所学,参考小蚂蚁的界面,编写了一款医学图像浏览器。 开发环境:vs2013、QT5.8、DCMTK3.6.7、VTK8.1.2、OpenCV2.4.10 下面简单…