Как отсортировать прямоугольные координаты, хранящиеся в std :: vector по вертикальным и горизонтальным линиям - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть робот, который печатает линии на полу, и я приказываю ему, отправив ему набор точек x, y. Точки содержатся в файле, подобном показанному на этом рисунке, который содержит два прямоугольника для печати. enter image description here

Я могу правильно собрать все точки и загрузить их в std :: vector следующим образом:

struct Coordinate
{
    double x0, x1, y0, y1;

    Coordinate(double paramx0, double paramy0, double paramx1, double paramy1) : x0(paramx0), y0(paramy0), x1(paramx1), y1(paramy1) {}
};

std::vector<Coordinate> coords;
...
coords.push_back(Coordinate(global_x0, global_y0, global_x1, global_y1));
...
cout<<coords.size()<<endl; 

for (unsigned int i = 0; i < coords.size(); ++i)
{
   cout << i << " X[0]: " << coords[i].x0 << " Y[0]: " << coords[i].y0 << " || X[1]: " << coords[i].x1 << " Y[1]: " << coords[i].y1 << endl; 
}

, и это пример результата, полученного на рисунке ниже.

0 X[0]: 62.5852 Y[0]: -36.5942 || X[1]: -62.5852 Y[1]: -36.5942
1 X[0]: 62.5852 Y[0]: -36.5942 || X[1]: 62.5852 Y[1]: 36.5942
2 X[0]: 62.5852 Y[0]: 36.5942 || X[1]: -62.5852 Y[1]: 36.5942
3 X[0]: -62.5852 Y[0]: -36.5942 || X[1]: -62.5852 Y[1]: 36.5942
4 X[0]: 62.5852 Y[0]: -76.4212 || X[1]: -62.5852 Y[1]: -76.4212
5 X[0]: 62.5852 Y[0]: -76.4212 || X[1]: 62.5852 Y[1]: -61.4214
6 X[0]: 62.5852 Y[0]: -61.4214 || X[1]: -62.5852 Y[1]: -61.4214
7 X[0]: -62.5852 Y[0]: -76.4212 || X[1]: -62.5852 Y[1]: -61.4214

Моя задача сейчас состоит в том, чтобы понять, как лучше создать список точек x, y, относящихся только к горизонтальным линиям, и другой список, содержащий только вертикальные линии, начиная с самой низкой координаты.

Робот будет двигаться, сначала напечатав вертикальные линии, а затем все горизонтальные линии. Например, на рисунке ниже робот сначала напечатает строки 1, 2, 3, 4 и остановится, а затем напечатает строки 5, 6, 7, 8. Итак, мне нужно сообщить роботу все путевые точки в правильном порядке.

Каков наилучший способ создания этих двух групп и упорядочения каждой линии на основе их расстояния? Роботу необходимо оптимизировать путь, сначала напечатав все сегменты, принадлежащие одному и тому же направлению.

PS Я использую C / C ++ и Ubuntu.

...