CGAL的三维点集

2023-12-25 06:44
文章标签 三维 点集 cgal

本文主要是介绍CGAL的三维点集,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        CGAL提供了几种处理点集的算法,从形状检测到通过标准点集处理工具进行的表面重建。

        虽然这些算法不强制使用特定的数据结构,但该软件包提供了一个3D点集结构,使用户更容易处理附加属性,如法向量、颜色、标签,并在其上调用CGAL算法。

1、一般原则

        CGAL::Point_set_3<Point,Vector> 是一个基于矢量的数据结构,其中包含点的坐标的默认属性(名为point)。

        用户需要的任何属性都可以在运行时轻松添加、修改和删除。属性由唯一名称和类型标识。提供了便利的方法来处理法向量(名为normal的属性),这是点集上非常常见的属性。

        为了优化内存分配和释放,每个点都与一个索引相关联。删除一个点只是将索引标记为已删除。在内部,这避免了在每次删除时修改属性向量,并允许插入新点以重用标记为已删除的点的索引。特别地,这意味着在某些删除操作完成后插入的点可能具有非默认初始化的属性。如果用户需要有效地释放内存,可以使用Point_set_3::garbage_collect()从内存中实际删除标记为已删除的元素。

2、简单使用

        数据结构设计为易于使用,尽管在使用属性时可能存在复杂性。提供了几种方便的方法来处理点和法线,而不必直接处理特性。

3、使用其他属性

        点集中的每个信息都是一个属性。原始点集仅具有点特性。正如我们在前面的例子中看到的,用户可以很容易地添加一个普通属性。但这种机制可以推广到任何类型的属性。

4、应用CGAL算法、

        大多数CGAL的算法让用户自由选择输入数据结构:然后通过范围和属性映射访问点和属性。CGAL::Point_set_3类是一个提供属性映射的范围:应用CGAL算法很简单。

        由于点集处理算法使用命名参数来处理属性映射,因此提供了一种方法CGAL::Point_set_3::parameters():它返回一个命名参数对象,该对象包含正确的点和法线映射,以便在点集对象中读写。

        此外,包Point Set Processing的所有输入/输出函数都被重载,因此用户只需将 Point_set_3 对象作为参数调用它们即可(请参见输入/输出)。

4.1、Point Set Processing

        以下示例显示了如何使用点集对象应用CGAL库中的一些算法:

        生成围绕球体的点集

        使用CGAL::jet_estimate_normals()估计法线

        用CGAL::grid_simplify_point_set()简化点集; 

       使用CGAL::shape_detection::Efficient_RANSAC检测球体形状

4.2、Input/Output

4.3、高级功能

        使用CGAL的函数读取文件需要稍微不同的行为,因为在将点插入点集中之前,会在内部定义该点的属性(这在CGAL::point_set_3中是不可能的)。尽管使用上一小节中提供的重载应该涵盖大多数用途,但我们记录了内部使用的特定后插入器和属性映射:

        CGAL::Point_set_3::index_back_inserter()用作创建新点的输出迭代器。

        CGAL::Point_set_3::Point_push_map()是用于设置点坐标的特性映射。如果不是首先创建的,它将首先在结构中插入创建的点(例如通过index_back_inserter())。

        CGAL::Point_set_3::normal_push_map()的工作原理类似,但适用于法线向量。

        这种推送属性映射也可用于其他用户定义的属性(请参见CGAL::Point_set_3::push_property_map())。
 

4.4、可视化

        可以通过调用CGAL::draw<PS>()函数来可视化3D点集

5、其他

CGAL 5.6 - 3D Point Set: User Manual

这篇关于CGAL的三维点集的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/534566

相关文章

hdu1240、hdu1253(三维搜索题)

1、从后往前输入,(x,y,z); 2、从下往上输入,(y , z, x); 3、从左往右输入,(z,x,y); hdu1240代码如下: #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#inc

hdu4826(三维DP)

这是一个百度之星的资格赛第四题 题目链接:http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1004&cid=500 题意:从左上角的点到右上角的点,每个点只能走一遍,走的方向有三个:向上,向下,向右,求最大值。 咋一看像搜索题,先暴搜,TLE,然后剪枝,还是TLE.然后我就改方法,用DP来做,这题和普通dp相比,多个个向上

Vector3 三维向量

Vector3 三维向量 Struct Representation of 3D vectors and points. 表示3D的向量和点。 This structure is used throughout Unity to pass 3D positions and directions around. It also contains functions for doin

数据集 3DPW-开源户外三维人体建模-姿态估计-人体关键点-人体mesh建模 >> DataBall

3DPW 3DPW-开源户外三维人体建模数据集-姿态估计-人体关键点-人体mesh建模 开源户外三维人体数据集 @inproceedings{vonMarcard2018, title = {Recovering Accurate 3D Human Pose in The Wild Using IMUs and a Moving Camera}, author = {von Marc

Rhinoceros 8 for Mac/Win:重塑三维建模边界的革新之作

Rhinoceros 8(简称Rhino 8),作为一款由Robert McNeel & Assoc公司开发的顶尖三维建模软件,无论是对于Mac还是Windows用户而言,都是一款不可多得的高效工具。Rhino 8以其强大的功能、广泛的应用领域以及卓越的性能,在建筑设计、工业设计、产品设计、三维动画制作、科学研究及机械设计等多个领域展现出了非凡的实力。 强大的建模能力 Rhino 8支持多种建

数据集 Ubody人体smplx三维建模mesh-姿态估计 >> DataBall

Ubody开源人体三维源数据集-smplx-三维建模-姿态估计 UBody:一个连接全身网格恢复和真实生活场景的上半身数据集,旨在拟合全身网格恢复任务与现实场景之间的差距。 UBody包含来自多人的现实场景的1051k张高质量图像,这些图像拥有2D全身关键点、3D SMPLX模型。 UBody由国际数字经济学院(IDEA)提供。 (UBody was used for mesh r

三维布尔运算对不规范几何数据的兼容处理

1.前言 上一篇文章谈过八叉树布尔运算,对于规范几何数据的情况是没有问题的。 在实际情况中,由于几何数据来源不一,处理和生成方式不一,我们无法保证进行布尔运算的几何数据都是规范的,对于不规范情况有时候也有需求,这就需要兼容不规范数据情况,当然这种兼容不是一味的让步,而是对于存在有限的不规范数据的兼容处理。 2.原始数据示例 下图是一个大坝模型和之上要对其进行布尔运算的立方体。 大坝模型由

三维激光扫描点云配准外业棋盘的布设与棋盘坐标测量

文章目录 一、棋盘标定板准备二、棋盘标定板布设三、棋盘标定板坐标测量 一、棋盘标定板准备 三维激光扫描棋盘是用来校准和校正激光扫描仪的重要工具,主要用于提高扫描精度。棋盘标定板通常具有以下特点: 高对比度图案:通常是黑白相间的棋盘格,便于识别。已知尺寸:每个格子的尺寸是已知的,可以用于计算比例和调整。平面标定:帮助校准相机和激光扫描仪之间的位置关系。 使用方法 扫描棋盘:

OpenCV结构分析与形状描述符(8)点集凸包计算函数convexHull()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C++11 算法描述 查找一个点集的凸包。 函数 cv::convexHull 使用斯克拉斯基算法(Sklansky’s algorithm)来查找一个二维点集的凸包,在当前实现中该算法的时间复杂度为 O(N logN)。 函数 cv::convexHull 是

学习CGAL:配置QT支持

发现问题 在之前的博客《学习CGAL:编译第一个工程》中,我成功生成了工程并编译,也貌似成功让CGAL的算法执行了。不过,我在执行工程中的draw_triangulation_2项目时,好像并没有达到期望的效果: 看起来这个程序应该能“画”出来什么东西,然而现在失败了。我想,这是因为CGAL本身只是包含算法的,要想可视化必须额外做些事情。 回头看官方文档可以发现,其实它已经提示了:很多CGA