CGAL入门——浅谈CGAL

发布时间 2023-08-09 22:25:50作者: 一只小瓶子

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):提供精确断言,精确地生成几何对象,精度最高,但是效率最差

这三种预定义核心组件都是基于笛卡儿坐标系核心的,只是其构造的域参数类型不同。

 

具体使用后面篇幅再介绍。

 

因为是刚接触学习,理解还不太深刻,所以该篇会处于一种持续的不定期更新状态......