如何根据区域对随机散落的点进行排序
how to sort randomly scattered points according to the region
我是 c++ 的新手,只知道最基础的知识。数组,如果 while 用于动态和指针..
我正在编写代码,这就是我想要做的。
例如,在一个 2D 正方形平面 (10x10) 上,我随机散布了 1000 个点(一个大小为 100 的数组)。
二维正方形平面被分成 10 个较小的矩形。现在我想将 1000 个点分类到这些较小的矩形中。基本上,我想制作 10 个动态数组(每个 "small rectangle" 一个),每个数组都将包含相应区域内的散点。
我想到的最基本的迭代就是使用 if, if, if...
但是有了这个,我必须为每个区域重复迭代 1000 次。而且我认为这是非常低效的。
写一个函数对单个点进行分类,即判断它属于哪个区域。作为您可以扩展的简单示例:
std::size_t classify(double px, double py, double split) {
if (px < split) {
return 0; // left plane
} else {
return 1; // right plane
}
}
然后,迭代这些点并将它们放入各自的容器中:
std::vector<std::vector<point_t>> region{2};
for (auto const & point : points) {
region[classify(point.x, point.y, split)].push_back(point);
}
这样你就可以在所有点上迭代一次,对每个点进行分类(在你的情况下应该可以在恒定时间内完成),这是所需的最少工作。
我是 c++ 的新手,只知道最基础的知识。数组,如果 while 用于动态和指针..
我正在编写代码,这就是我想要做的。 例如,在一个 2D 正方形平面 (10x10) 上,我随机散布了 1000 个点(一个大小为 100 的数组)。 二维正方形平面被分成 10 个较小的矩形。现在我想将 1000 个点分类到这些较小的矩形中。基本上,我想制作 10 个动态数组(每个 "small rectangle" 一个),每个数组都将包含相应区域内的散点。
我想到的最基本的迭代就是使用 if, if, if... 但是有了这个,我必须为每个区域重复迭代 1000 次。而且我认为这是非常低效的。
写一个函数对单个点进行分类,即判断它属于哪个区域。作为您可以扩展的简单示例:
std::size_t classify(double px, double py, double split) {
if (px < split) {
return 0; // left plane
} else {
return 1; // right plane
}
}
然后,迭代这些点并将它们放入各自的容器中:
std::vector<std::vector<point_t>> region{2};
for (auto const & point : points) {
region[classify(point.x, point.y, split)].push_back(point);
}
这样你就可以在所有点上迭代一次,对每个点进行分类(在你的情况下应该可以在恒定时间内完成),这是所需的最少工作。