qhull 求取一维数据凸包络 C++ 代码
时间: 2024-02-27 08:58:51 浏览: 126
一维情况下,数据的凸包就是数据的最大值和最小值。以下是使用STL库求取一维数据凸包的C++代码示例:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
// 构造一维数据
vector<double> data;
data.push_back(0.5);
data.push_back(1.0);
data.push_back(0.2);
data.push_back(0.8);
data.push_back(0.1);
// 求取凸包
double max_value = *max_element(data.begin(), data.end());
double min_value = *min_element(data.begin(), data.end());
// 输出结果
cout << "凸包顶点:" << endl;
cout << "最大值:" << max_value << endl;
cout << "最小值:" << min_value << endl;
return 0;
}
```
这里使用STL库来求取数据的最大值和最小值,作为凸包的顶点。
相关问题
qhull 求取二维正方形数据包络 C++ 代码
以下是使用qhull库求取二维正方形数据包络的C++代码示例:
```c++
#include <iostream>
#include <vector>
#include "libqhullcpp/Qhull.h"
using namespace std;
using namespace orgQhull;
int main()
{
// 构造数据点
vector<Point2> points;
points.push_back(Point2(0, 0));
points.push_back(Point2(1, 0));
points.push_back(Point2(1, 1));
points.push_back(Point2(0, 1));
// 构造Qhull对象
Qhull qhull;
qhull.runQhull("", 2, points.data(), points.size(), "i Qt");
// 获取正方形包络顶点
vector<Point2> vertices;
for (QhullVertexSet::iterator it = qhull.vertexSet().begin(); it != qhull.vertexSet().end(); ++it)
{
Point2 point = (*it).point();
if (point[0] == 0 || point[0] == 1)
{
if (point[1] == 0 || point[1] == 1)
{
vertices.push_back(point);
}
}
}
// 输出结果
cout << "正方形包络顶点:" << endl;
for (vector<Point2>::iterator it = vertices.begin(); it != vertices.end(); ++it)
{
cout << (*it) << endl;
}
return 0;
}
```
与三维情况类似,这里使用libqhullcpp库来进行qhull计算,首先构造数据点,然后构造Qhull对象并运行qhull计算,最后从计算结果中提取正方形包络顶点并输出。这里采用的方法是根据正方形的特点来判断顶点是否在包络内。
qhull 求取二维数据包络 C++ 代码
求取二维数据包络的方法与求取点云凸包类似,下面是一个使用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;
```
这里得到的计算结果是三个顶点组成的三角形,它们构成了二维数据的包络。
阅读全文