qhull 求取包络 c++ 代码
时间: 2023-07-24 12:20:51 浏览: 233
求取点云的凸包(Convex Hull)是Qhull库的一个常见用法,下面是一个使用Qhull库求取点云凸包的C++代码示例:
```cpp
#include <QCoreApplication>
#include <QDebug>
#include <qhullcpp/Qhull.h>
#include <qhullcpp/QhullFacetList.h>
#include <qhullcpp/QhullFacet.h>
#include <qhullcpp/QhullVertex.h>
#include <iostream>
using namespace orgQhull;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 创建一个Qhull对象
Qhull qhull;
// 设置点集
QList<QPointF> points = {QPointF(0, 0), QPointF(1, 0), QPointF(0, 1)};
qhull.setPoints(points, "Qt");
// 设置选项,计算凸包
qhull.runQhull("i");
// 获取凸包信息
QhullFacetList facets = qhull.facetList();
// 输出凸包信息
for(QhullFacetList::iterator i = facets.begin(); i != facets.end(); i++){
QhullFacet f = *i;
QhullVertexSet vs = f.vertices();
for(QhullVertexSet::iterator j = vs.begin(); j != vs.end(); j++){
QhullVertex v = *j;
std::cout << v.point().x() << ", " << v.point().y() << "; ";
}
std::cout << std::endl;
}
return a.exec();
}
```
在这个例子中,我们首先创建了一个Qhull对象qhull,并设置一个包含三个点坐标的点集。接下来,我们调用runQhull函数设置选项"i",表示计算点云的凸包。最后,我们使用facetList函数获取计算得到的凸包信息,并遍历每个凸包输出它们的顶点坐标。运行结果如下:
```
0, 0; 1, 0; 0, 1;
```
这里得到的计算结果是三个顶点组成的三角形,它们构成了点云的凸包。
阅读全文