You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

49 lines
1.1 KiB
C++

#pragma once
#include "VoronoiMap/InterfaceElements.h"
#include <vector>
/*@class: CPointSubset
* @desc: 用于对点集按距离抽稀,
使用说明:
1. 声明变量 vector<CPointXYZ> vecpts;
std::vector<int> idxReserved;
CPointSubset subset;
2.vecpts插入数据
3. 调用subset.CreateSubsetWithMinDist( 150.0, idxReserved);
使用方法:
* @date: 2023.5.24
*/
class CPointSubset
{
public:
CPointSubset(void);
~CPointSubset(void);
//从文件中读取散点
int ReadPoints(CString strXyz);
//从内存中读取散点
int ReadPoints(std::vector<CPointXYZ>& vecXyz);
//通过设置最小距离抽稀数据, 生成的子集点之间距离大于fMinDist ,idxReserved = 保留的点序号
//idxRemoved = 移除的点序号
int CreateSubsetWithMinDist(float fMinDist, std::vector<int>& idxReserved,
std::vector<int>* idxRemoved = nullptr);
//由点序号写出点集到文件
int WritePoints(CString fname,std::vector<int>& idxReserved);
// 抽稀后的 xyz 列表
const std::vector<CPointXYZ> &points() { return m_points; }
protected:
void GetExtremeValues(void); //获取散点极值
std::vector<CPointXYZ> m_points;
double m_xmin; //x最小
double m_xmax; //x最大
double m_ymin; //y最小
double m_ymax; //y最大
};