一、什么是CGAL
CGAL(Computational Geometry Algorithms Library)是一个广泛使用的开源库,主要用于计算几何算法的实现。该库提供了一系列高效、可靠和易于使用的几何算法和数据结构,适用于各种应用领域。以下是 CGAL 的主要功能和应用场景:
主要功能
-
几何数据结构:
- 点、向量、线段、多边形、平面等基本几何对象。
- KD 树、四叉树、三叉树等空间分割数据结构。
-
计算几何算法:
- 凸包算法:计算二维和三维空间中的凸包。
- 三角剖分:包括 Delaunay 三角剖分、约束 Delaunay 三角剖分、Conforming Delaunay 三角剖分等。
- Voronoi 图:生成 Voronoi 图,并支持各种查询操作。
- 布尔运算:多边形和多面体的布尔运算,如并、交、差、对称差等。
- Nef 多面体:用于表示多面体的布尔运算和变换。
-
数值几何算法:
- 最近点查询:基于 KD 树和 Delaunay 三角剖分的最近点查询。
- 点云处理:包括点云的简化、重建、配准等。
-
曲线和曲面处理:
- NURBS 曲线和曲面:支持非均匀有理 B 样条(NURBS)的表示和操作。
- 平滑和细分:曲线和曲面的平滑和细分算法。
二、安装步骤
在Ubuntu上安装CGAL的步骤如下:
打开终端。,更新包管理器的索引列表:
sudo apt-update
安装CGAL的依赖库:
sudo apt-get install libcgal-dev
如果你需要编译使用了CGAL的C++程序,确保你的编译器能够找到CGAL的头文件和库。通常,CGAL会被安装在标准的位置,但如果你的编译器需要特殊配置,你可以查看/usr/include/CGAL
目录和/usr/lib/x86_64-linux-gnu/cgal
(或者你的系统架构相关的目录)。
三、示例
简单的距离计算demo
#include <CGAL/Simple_cartesian.h>
#include <CGAL/point_generators_2.h>
#include <CGAL/algorithm.h>
#include <iostream>
typedef CGAL::Simple_cartesian<double> Kernel;
typedef Kernel::Point_2 Point_2;
int main() {
// 定义两个点
Point_2 p(1.0, 1.0);
Point_2 q(4.0, 5.0);
// 计算两点之间的距离
double distance = CGAL::squared_distance(p, q);
std::cout << "Squared distance between p and q is: " << distance << std::endl;
return 0;
}
CMakeList.txt
cmake_minimum_required(VERSION 3.1)
project(cgal_demo)
# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 查找 CGAL 包
find_package(CGAL REQUIRED)
# 添加可执行文件
add_executable(cgal_demo cgal_demo.cpp)
# 链接 CGAL 库
target_link_libraries(cgal_demo CGAL::CGAL)
运行报错
The variable CMAKE_BUILD_TYPE is set to "". For performance reasons, you should set CMAKE_BUILD_TYPE to "Release".
生成 Makefile 并设置 CMAKE_BUILD_TYPE
为 Release
:
cmake -DCMAKE_BUILD_TYPE=Release ..