У меня есть много несортированных 2D точек, которые представляют положения случайно выбранных пикселей изображения.
На следующем шаге я пытаюсь отсортировать / растеризовать их в 2D массиве, по точке с наименьшим x, значение y в
array[0][0]
и точка с наибольшим значением x, y в
array[n][k]
с условием 1:
все остальные 2D должны находиться между этими границами и почти отсортировано.
условие 2:
все строки массива должны быть заполнены почти одинаковым количеством значений, одинаковыми для столбцов.
Есть идеи, как решить эту проблему?
Я вычислил триангуляцию Делоне и подумал о диаграмме Вороного, чтобы шаг за шагом бросать каждую клетку, но я не знаю, нахожусь ли я на правильном пути.
Мои случайные позиции созданы таким образом:
std::vector<Point_d> sample_rand_points(){
std::cout<<"sampling random points\n";
std::vector<Point_d> output_pattern;
//PREPARE:
std::vector<std::pair<int, int> > not_sampled_yet;
for(int x=0; x<_X; x++)
{
for(int y=0; y<_Y; y++)
{
not_sampled_yet.push_back(std::pair<int,int>(x,y));
}
}
//SAMPLING
Point_d pix;
for (int i=0; i<_Amount; i++)
{
//std::cout<<i<<"\n";
int n= rand()% not_sampled_yet.size();
pix.x= (double)not_sampled_yet[n].first;
pix.y= (double)not_sampled_yet[n].second;
not_sampled_yet[n]=not_sampled_yet.back();
not_sampled_yet.pop_back();
output_pattern.push_back(pix);
}
return output_pattern;
}
На выходе получается один вектор с точками {{x1, y1}, {x2, y2}, ......}