CGAL入门——浅谈CGAL
CGAL官网https://doc.cgal.org/latest/Manual/index.html
最近在学习CGAL,发现CGAL中文资料太少了,官网示例代码也很少注释,还加入了很多自定义的很少见过的名词,易读性略差,学习起来有点难度
赶紧记录一下学习过程,怕以后忘了
1.简介
CGAL(Computational Geometry Algorithms Library,计算几何算法库)该库选用了C++模板编程范式,提供方便,高效,可靠的几何算法。
CGAL主要分为三部分:
1)内核(kernel):基本的几何对象(比如点,向量,方向,直线,射线,线段,三角形等),以及作用在这些对象的一些操作,一般有访问函数(比如一个点的坐标),测试点和这个对象的位置关系,得到对象的包围盒子的函数,长度,面积等等.核心中还包含一些基本超作,比如仿射变幻,相交的检测与计算,距离计算);
2)基础几何数据结构和算法:它们被特征类参数化.而特征类定义了数据结构或者算法和它们使用的原生类型(primitives)的接口,在很多情况下CGAL中的核心类可以作为这些数据结构或算法的特征类使用.
3)与几何无关的组件:如迭代器、随机数源、I/O支持以及一些可视化工具等
2.CGAL内核
先介绍2个名词
1)predicates:谓词(断言),返回不二或枚举类型,用来判断一些几何关系的一类函数,所以返回值是一个离散值
2)constructions:构造,即生成几何对象的一类函数,返回数字或者几何元素
CGAL根据不同精度预定义了3个kernel
1)笛卡尔坐标内核(CGAL::Simple_cartesian<double>):也可以是float,精度一般,但是效率最高
2)精确谓词不精确构造(GAL::Exact_predicates_inexact_constructions_kernel):提供精确断言,但是生成几何对象可能存在误差
3)精确谓词精确构造(CGAL::Exact_predicates_exact_constructions_kernel):提供精确断言,精确地生成几何对象,精度最高,但是效率最差
这三种预定义核心组件都是基于笛卡儿坐标系核心的,只是其构造的域参数类型不同。
具体使用后面篇幅再介绍。
因为是刚接触学习,理解还不太深刻,所以该篇会处于一种持续的不定期更新状态......