qhull 求取二维数据包络 C++ 代码
时间: 2023-12-05 07:04:38 浏览: 214
求取二维数据包络的方法与求取点云凸包类似,下面是一个使用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("Fx");
// 获取包络信息
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函数设置选项"Fx",表示计算二维数据的包络。最后,我们使用facetList函数获取计算得到的包络信息,并遍历每个包络输出它们的顶点坐标。运行结果如下:
```
0, 0; 0, 1; 1, 0;
```
这里得到的计算结果是三个顶点组成的三角形,它们构成了二维数据的包络。
阅读全文