如何根据区域对随机分散的点进行排序

时间:2015-07-26 06:50:31

标签: c++ sorting graphics 2d

我是c +的新手,只知道非常基础知识。数组,如果是动态和指针..

我正在编写代码,这就是我想要做的。 例如,在2D方形平面(10x10)上,我随机散布了1000个点(大小为100的数组)。 2D方形平面分为10个较小的矩形。现在我想将1000点分成这些较小的矩形。基本上,我想制作10个动态数组(每个“小矩形”一个),每个数组都包含相应区域内的散点。

我想到的最基本的迭代只是使用if if if if ... 但有了这个,我必须为每个区域重复1000次迭代。而且我认为这是非常低效的。

1 个答案:

答案 0 :(得分:0)

编写一个函数来对单个点进行分类,即确定它属于哪个区域。作为一个可以扩展的简单示例:

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);
}

通过这种方式,您可以对所有点进行一次迭代,对每个点进行分类(在您的情况下应该可以在恒定时间内完成),这是所需的最小工作量。