Qhull 求取包络
时间: 2023-12-15 15:05:50 浏览: 62
Qhull 是一个计算几何库,提供了许多计算几何算法的实现,包括包络算法。使用 Qhull 实现包络算法的步骤如下:
1. 引入 Qhull 的头文件:
```c++
#include <qhull/qhull.h>
```
2. 定义点集:
```c++
typedef qhull::coordT coordT;
typedef std::vector<coordT> Point;
typedef std::vector<Point> PointList;
PointList points = {
{0, 0},
{0, 1},
{1, 0},
{1, 1}
};
```
3. 调用 Qhull 库的接口求取包络:
```c++
qhull::Qhull qhull;
qhull.runQhull("", 2, points[0], points.size(), "qhull FA");
PointList vertices = qhull.getFacetVertices();
```
其中,`qhull.runQhull()` 函数接受的参数分别为:
- `""`:命令行参数,表示使用默认参数;
- `2`:点的维度;
- `points[0]`:点集中第一个点的地址;
- `points.size()`:点集中点的数量;
- `"qhull FA"`:选项字符串,表示计算凸包并输出面信息。
`qhull.getFacetVertices()` 函数用于获取凸包的面信息,返回一个包含每个面上点集的列表,每个点由一个坐标数组表示。例如,对于四边形的凸包,返回的结果可能如下所示:
```
[ [[0, 0], [1, 0], [1, 1], [0, 1]],
[[0, 0], [0, 1], [1, 1], [1, 0]] ]
```
每个列表表示凸包上的一个面,每个面由多个点组成,每个点由一个坐标数组表示。
需要注意的是,需要先安装 Qhull 库并将其路径添加到编译器的 include 路径中。
阅读全文