CGAL的使用

article/2025/9/21 13:00:06

1 C++类的知识

因为CGAL是用C++实现的,所以需要先了解一下C++编程。C++是面向对象的编程,这也是C++对C语言改进的最重要的部分。C++也被叫做是"带类的 C"。简单讲一下类的构成,成员函数以及对象的定义和使用。

1.1 C++类的构成

首先从C的结构体说起。C中的结构体我想大家已经熟悉了,不熟悉的朋友可以先了解一下,这将对你认识“类”有很好的帮助。C中的结构体存在缺点:1.main 函数中的任意赋值语句都可以访问结构体中的成员,但在实际应用中我们想保护自己的私密数据不被访问,因此C语言中的结构体的数据是不安全的;2.结构体中的数据和对该数据的操作是分离的,并不是一个被封装起来的整体,因此使程序难以重用,影响了软件生产效率。于是C++中引入了类的概念。

C++中类的一般格式为:

   class Kid{private:int age;    //私有成员char *name;char *sex;public:      //公有成员void setKid(int age,char *name,char *sex);void showKid();};

C++中规定如果没有对类的成员加私有private,保护protected,公有public,则默认为私有的。而对于 C++的结构体来说,成员可以是私有的,保护的或公有的,但默认为公有的;还有要注意的是不能在类的声明中给数据成员赋值。

一般情况下,一个类的数据成员应该声明为私有的,成员函数声明为共有的。这样,内部的数据隐藏在类中,在类的外部无法访问直接访问,使数据得到有效的保护。而公有的成员函数就成为一种与类外部沟通的接口。

1.2 C++中的成员函数

1) 普通的成员函数。
要注意几点:1.类名和函数名之间应加上作用域运算符::,用于声明这个成员函数是属于哪一个类的,如果在函数名前没有类名,或既无类名又无作用域运算符::,那么这个函数不属于任何类,不是成员函数,而是普通函数;2.在类的声明中,成员函数原型的参数表中可以不说明参数的名字,而只说明它的类型,但在类外定义时必须既要说明参数类型又要说明参数名;
2) 内联成员函数,它又分显式声明和隐式声明。

1.3 C++中的成员函数

类与对象的关系可以用数据类型int和整形变量i之间的关系来类比。int类型和类类型代表一种抽象的概念,而整形变量和类的对象代表具体的东西。C++把类的变量称为类的对象,对象也被称为类的实例;类的对象可以是: class Kid{...}kid1,kid2;也可以是声明了类后,使用时在定义对象: Kid kid1,kid2;(声明一个类后,它并不接受和存储具体的值,只作为生成具体对象的一种样板,只有定义了对象后,系统才为对象分配存储空间,以存放对象中的成员);

对对象中的成员的访问可以是:
1) 对象名.数据成员名/对象名.成员函数名(参数),比如

kid1.setKid(10,"rookie_j","男");

2) 指针访问对象中成员,比如:

class Kid{public: int age;}; 
Kid kid,*ptr; 
ptr=&kid;
cout << ptr->age //cout<<(*ptr).age;

3) 可以通过引用来访问对象中的成员

class Kid{public: int age;};
Kid kid;
Kid &ptr=kid;
cout << ptr.age   //cout<<kid.age;

因为接下来要讲解的运用CGAL库编写凸包的程序,其程序运用以上的 C++的知识就可以理解了,所以只讲解以上的 C++ 的知识,具体想了解 C++的话,推荐(注意了解某种语言,不在于你看了多少书,而是去尝试编写)

1.《C++ Primer中文版》(第4版)【原书名】 C++ Primer (4th Edition)【原出版社】 Addison Wesley/Pearson【作者】 (美)Stanley B.Lippman,Josée LaJoie,Barbara E.Moo【译者】 李师贤【丛书名】 图灵计算机科学丛书【出版社】人民邮电出版社
2.《C++ Primer Plus》(第四版)中文版【原书名】 C++ Primer Plus,Fourth Edition【原出版社】 Sams【作者】 (美)Stephen Prata【译者】 孙建春 韦强【丛书名】 Primer Plus 系列【出版社】 人民邮电出版社

2 CGAL库的应用

2.1 CGAL 中的 Kernel 和眼花缭乱的 typedef

看CGAL中演化缭乱的Kernel对我这个C++入门级的人来说是件痛苦的事。倘若有时间,我会认真去看看模板类,类模板什么的再去好好理解这些东西,但是我想大部分人在学习新的东西的时候是没有兴趣去看那么的多参考书。所以摸着石头过河时最好最有效的方法。以下说说这Kernel是个什么东西,为什么要有那么多的typedef

CGAL的开发人员力图让这个程序包有较强的扩展性,要有扩展性,同时又要有一定的规则层次。这个层次的底层是代数结构,其上谈number type,再往上就是基本几何对象(线,面,点,射线,线段)和定义在基本几何对象上的基本算法,在往上就是各种复杂的几何算法(包围盒,搜索,网格化等),如下图所示。
CGAL层次图
<img src="htt://cgal_use.com/1.png" width="400" height="100">

所谓的Kernel就是Layer2的内容。CGAL将Layer2按照基本几何对象的表达方式(用欧式坐标表达还是其次坐标表达)进一步分成CartesianHomogeneous两种。简单的说,我们用Cartesian开始编程,以后的对象操作什么的都是用x , y , z三个坐标去表示点,线,面。

因为各个layer的东西在CGAL里都是以类模板的形式定义。CGAL的一开始,会有一大堆typedef,其实就是给这些类模板起一个简单而又好记的名字。看一例:

   typedef CGAL:: Exact_predicates_exact_constructions_kernel K;typedef K::Ray_3 Ray;typedef K::Line_3 Line;typedef K::Point_3 Point;typedef K::Triangle_3 Triangle;typedef std::list<Triangle>::iterator Iterator;typedef CGAL::AABB_triangle_primitive<K,Iterator> Primitive;

CGAL给出了一些预定义的东西,也就是把上面那个不断typedef的最初一部分给隐藏掉:

   Exact_predicates_exact_constructions_kernel;Exact_predicates_exact_constructions_kernel_with_sqrt;Exact_predicates_inexact_constructions_kernel;

这些预定义的东西默认使用Cartesian,数据类型支持double,还包括能实现精确的几何判断(exact predicate ),原来的代码可以写成:

   typedef CGAL:: Cartesian<double> K;// 使用Cartesian坐标描述几何体,坐标的数值时double型,以后用到 ray , line等几何体的时候都按照Cartesian方式给出double型坐标。typedef K::Ray_3 Ray;typedef K::Line_3 Line;typedef K::Point_3 Point;typedef K::Triangle_3 Triangle;typedef std::list<Triangle>::iterator Iterator;typedef CGAL::AABB_triangle_primitive<K,Iterator> Primitive;//这句话表示使用高级计算几何算法AABB时,所有的几何对象都是Cartesian表示的,坐标的数值都是double。

2.2 CGAL中某种算法的运用流程

点击http://doc.cgal.org/latest/Manual/packages.html| 66c998fe1f511ede5c7483b24fcc88ca4 |进入CGAL手册,出现各种算法库Arithmetic and AlgebraCombinatorial AlgorithmsGeometry KernelsPolygons、Arrangements等等。
假如我们想找有关3d凸包的算法,则找到如下图所示的算法,
3D凸包手册

点击reference manual,就会看到该算法库中的ConceptsTraits ClassesConvex Hull FunctionsConvexity Checking Function,如下图:
图片描述

点击convex_hull_3函数,就会看见该函数的使用规则和实例,如下图
图片描述

每个算法库中都会带有示例程序,点击左侧列表中example->convex_hull_3/quickhull_3.cpp,就会看到如下示例程序:


http://chatgpt.dhexx.cn/article/ULcgPwu2.shtml

相关文章

cgal配置以及一些资料

Win7下VS2008编译CGAL3.9 &#xff08;转&#xff1a;http://blog.csdn.net/wsh6759/article/details/6977847&#xff09; CGAL是比较经典的计算几何库&#xff0c;算法经典&#xff0c;稳定高效。 本文介绍编译CGAl情况&#xff0c; 前期准备&#xff1a; BOOST&#x…

CGAL学习记录

CGAL学习记录 前言CGAL 介绍CGAL Linux安装CGAL Windos安装CGAL 安装错误及解决办法CGAL 安装后测试CGAL I/O读写 FunctionsCGAL OFF数据格式CGAL OFF STL相互转换CGAL 表面细化CGAL 表面平滑CGAL 表面补洞CGAL 自相交检测CGAL 提取中心线 前言 原先使用vtk有些小地方不是很理…

CGAL Cookbook --CGAL简介

##前言 ## 接触CGAL已经有半年了&#xff0c;从最初的厌恶&#xff08;对于一个初学者来说&#xff0c;CGAL确实有点难度&#xff0c;它要求初学者有一定基础&#xff09;到后来的喜欢。现在觉得CGAL简直完美极了&#xff0c;虽然它存在一些BUG但是这并不妨碍我爱上CGAL。它的…

[CGAL] CGAL的编译与使用

文章目录 方法一&#xff1a;自己安装依赖库安装Boost安装CGAL安装Qt编译示例在VS中使用CGAL库引用boost引用gmp引用CGALHelloworld 报错处理在cmake配置时报错&#xff1a;未能找到Boost编译示例&#xff0c;未找到GMP编译Mesh_3例子报错&#xff1a;未能找到Eigen3编译demo/P…

CGAL学习之路(三):CGAL读写点云

文章目录 1 CGAL创建点云1.1 insert方式1.2 迭代器方式 2 CGAL读点云2.1 读取XYZ点云2.2 读取PLY点云2.3 ifstream读取XYZ \ PLY点云 3 CGAL输出点坐标3.1 输出点云所有坐标3.2 输出某一点的坐标3.3 输出XYZ坐标 4 CGAL保存点云&#xff08;XYZ | PLY&#xff09;5 添加法向量字…

【C++】CGAL学习笔记

一、HELLO WORLD 1. 官方文档&#xff1a;CGAL-TUTORIALS 2. 所有CGAL头文件都在子目录中。所有CGAL类和函数都在命名空间中。类以大写字母开头&#xff0c;全局函数以小写字母开头&#xff0c;常量全部大写。 3. 几何图元&#xff0c;如点、线等都定义在内核Kernel中 #inc…

自动化测试方案设计和实现

编辑推荐: 本文主要介绍了几种测试类型需求&#xff0c;以及自动化测试方案设计和实现&#xff0c;希望对您的学习有所帮助。 本文来自于知乎&#xff0c;由火龙果软件Alice编辑、推荐。 如果对软件测试、接口、自动化、性能测试、测试开发、面试经验交流。感兴趣可以8101198…

测试方案模板

&#xff08;iwebshop项目&#xff09;测试方案 &#xff08;仅供参考&#xff09; 文档版本控制 文档版本号 日期 作者 审核人 说明 V1.0 2017/11/24 陈.. 创建文档 1. 概述 【软件的错误是不可避免的&#xff0c;所以必须经过严格的测试。通过对…

测试方案/测试计划/测试报告,经常弄混要怎么区分?

目录 前言 1、测试方案和测试计划的区别 2、测试方案和测试计划什么时候编写 3、测试方案 4、测试计划 5、测试报告 前言 测试方案和测试计划&#xff0c;测试报告几乎都是每个测试人员都必须掌握的。但有时经常搞混&#xff0c;特别是测试方案和测试计划。 1、测试方案…

自动化测试方案

自动化测试体系方案 方案1全编写代码流程 UI自动化&#xff1a; 使用python或java&#xff0c;配合selenium库及pytest框架做UI自动化测试。&#xff08;通过selenium的webdriver驱动&#xff0c;驱使浏览器&#xff09; 1. WebDriver API&#xff08;基于Java、Python&…

SpringBoot - 应用程序测试方案

文章目录 PreSpring Boot 中的测试解决方案测试 Spring Boot 应用程序初始化测试环境SpringBootTestSpringBootTest - webEnvironment RunWith 注解与 SpringRunner 执行测试用例使用 DataJpaTest 注解测试数据访问组件Service层和Controller的测试使用 Environment 测试配置信…

测试计划和测试方案有什么区别?

一、测试计划 1、测试计划是什么&#xff1f; 测试计划是组织管理层面的文件&#xff0c;从组织管理的角度对一次测试活动进行规划。对测试全过程的测试范围、组织、资源、原则等进行规定和约束&#xff0c;并制定测试全过程各个阶段的任务分配以及时间进度安排&#xff0c;并…

测试方案的设计及模板

测试方案设计及模板 测试方案设计概括xx测试方案_模板1.引言2.测试策略3.测试设计4.测试资源5.输出文档6.修订记录推荐书籍 测试方案设计概括 xx测试方案_模板 1.引言 1.1目的 根据需要实现的需求与软件的设计架构&#xff0c;设计满足测试目标的方案&#xff0c;用来指导测试…

软件测试方案设计

文章目录 1、软件框架2、测试方案设计2.1、测试覆盖2.2、功能测试和压力测试2.3、自动化测试2.4、持续集成 1、软件框架 站在软件的角度&#xff0c;一个系统通常可以分为以下四个层次&#xff1a; 应用软件层(app layer)。用户重点自己开发的应用代码&#xff0c;例如我们的运…

又发现个新的全网资源搜索神器

平常用谷歌百度搜资源一个个翻很费劲&#xff0c;这里分享几个最新可用的全网网盘资源搜索神器&#xff0c;在公众号苏生不惑后台回复神器 获取软件下载地址。 混合盘 这个app聚合搜索多个网盘资源&#xff0c;可从数十个网盘搜索网站中检索出你需要的资源&#xff0c;app非常简…

magnetX,资源搜索神器!老司机快上车!

magnetX 中文版是一款非常好用的资源搜索神器&#xff0c;界面干净简洁并且不会有弹窗。而且可以通过关键字搜索&#xff0c;或者网址过滤这两种方式快速找到你想要的资源&#xff0c;并且还能配合WebTorrent在线播放&#xff0c;还可以配合下载工具进行一键下载资源&#xff0…

【森林SOU】小巧绿色版搜索神器

种子搜索神器是一款基于P2P技术的资源搜索软件&#xff0c;搜索神器有很多&#xff0c;其实下面为大家带来的这个搜索工具就很不错&#xff0c;小巧功能强大无需安装&#xff0c;这里有着十分全面的资源可以自由搜索&#xff0c;下载也没有什么速度限制&#xff0c;十分便捷&am…

2014 三款强大搜片神器 | 各种视频资源 | 电影电视剧搜索

您还在百度上搜索电影吗&#xff0c;即浪费时间有累眼睛&#xff0c;并且还经常找到的不是自己想要的资源(某位仁兄下来了几个G的葫芦娃~~)。 亲们的福音来了。三款超强大的搜索下载看片软件很适合你。 只要有了他们&#xff0c;找神马资源都会变的轻松&#xff0c;So Easy~~ 下…

分享几个好用的百度网盘搜索引擎

与大家分享几个好用的网盘搜索神器&#xff0c;方便大家搜索百度云网盘分享的资源文件。&#xff08;已测试&#xff0c;目前都可用&#xff09; 一、 盘搜 http://www.pansou.com/ 网站简洁&#xff0c;搜索即可出来结果&#xff0c;点击搜索结果就能跳转。 二、 飞鱼盘搜 h…

吊打本地搜索神器everthing,最快 最强的电脑本地搜索神器!

Windows的小伙伴应该都对Windows资源管理器 自带的『文件搜索功能』说一句“垃圾” 全盘搜索一个文件居然需要几十秒 而为了解决Windows搜索慢的问题 不少小伙伴应该都用过或者听说过『Everything』这个软件 不论磁盘空间多大、存有多少文件 Everything都能以毫秒级的速度搜…