移除容器内vector<Point3d>&Vec指定公差的点
时间: 2023-08-11 10:08:43 浏览: 87
约束顶夸克耦合,将顶夸克和$$ \ varvec {B} $$ <math> <mrow> <mi> B </ mi> </ mrow> </ math>衰减可观察到
好的,针对您的问题,可以按照以下步骤来移除容器内指定公差的点:
1. 对容器内的点按照某种规则排序,例如按照点的 x 坐标排序。
2. 遍历容器内的点,对于相邻的两个点,如果它们之间的距离小于指定公差,就删除后面的点。
3. 遍历完成后,容器内就只剩下满足指定公差的点了。
具体实现代码如下:
```cpp
#include <vector>
#include <opencv2/core.hpp>
void removePointsWithTolerance(std::vector<cv::Point3d>& Vec, const double tolerance)
{
// 按照 x 坐标排序
std::sort(Vec.begin(), Vec.end(), [](const cv::Point3d& p1, const cv::Point3d& p2) {
return p1.x < p2.x;
});
// 遍历容器内的点,删除距离小于指定公差的点
auto it = Vec.begin();
while (it != Vec.end() - 1) {
const double dist = cv::norm(*it - *(it + 1)); // 计算两点之间的距离
if (dist < tolerance) {
it = Vec.erase(it + 1); // 删除后面的点
} else {
++it;
}
}
}
```
上述代码中,我们使用了 OpenCV 的 norm 函数来计算两点之间的距离,它可以计算任意维度的向量之间的距离。在实际使用中,需要根据具体情况来选择排序规则和距离计算方法。
阅读全文