Алгоритм сортировки для нарезки сетки

У меня проблема с алгоритмами сортировки программного обеспечения для 3D-принтеров. Я получаю данные xyz срезов данного файла.stl в виде вектора с тремя столбцами и n строками, где n - количество точек для каждого среза.

Так что код для вектора выглядит так:

        x=matrix[n][0];
        y=matrix[n][1];
        z=matrix[n][2];

Матрица - это мой вектор, содержащий все координаты для всех точек сетки.

Когда я распечатываю координаты точек, я получаю несортированный список. Таким образом, следующий список показывает точки первого слоя / среза куба с размерами 10x10x10 мм.

X=-5.000000, Y=2.000000, Z=-2.000000
X=-5.000000, Y=-5.000000, Z=-2.000000
X=5.000000, Y=5.000000, Z=-2.000000
X=5.000000, Y=-2.000000, Z=-2.000000
X=5.000000, Y=-2.000000, Z=-2.000000
X=5.000000, Y=-5.000000, Z=-2.000000
X=5.000000, Y=5.000000, Z=-2.000000
X=2.000000, Y=5.000000, Z=-2.000000
X=2.000000, Y=5.000000, Z=-2.000000
X=-5.000000, Y=5.000000, Z=-2.000000
X=5.000000, Y=-5.000000, Z=-2.000000
X=-2.000000, Y=-5.000000, Z=-2.000000
X=-2.000000, Y=-5.000000, Z=-2.000000
X=-5.000000, Y=-5.000000, Z=-2.000000

Таким образом, результат этого показан на этой фигуре. Несортированные точки

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

Сортированный список выглядит так

X=5.000000, Y=5.000000, Z=-2.000000 
X=5.000000, Y=5.000000, Z=-2.000000 
X=5.000000, Y=-2.000000, Z=-2.000000 
X=5.000000, Y=-2.000000, Z=-2.000000 
X=5.000000, Y=-5.000000, Z=-2.000000 
X=5.000000, Y=-5.000000, Z=-2.000000 
X=2.000000, Y=5.000000, Z=-2.000000 
X=2.000000, Y=5.000000, Z=-2.000000 
X=-2.000000, Y=-5.000000, Z=-2.000000 
X=-2.000000, Y=-5.000000, Z=-2.000000 
X=-5.000000, Y=5.000000, Z=-2.000000 
X=-5.000000, Y=2.000000, Z=-2.000000 
X=-5.000000, Y=-5.000000, Z=-2.000000 
X=-5.000000, Y=-5.000000, Z=-2.000000 

Единственная идея, как я мог бы отсортировать точки, - это начать с первого квадранта декартовой системы координат, а затем перейти к следующим квадрантам. Поскольку я вычисляю слой за слоем, z-coodrinate можно игнорировать. Но для этого я не знаю, как запустить код. У кого-нибудь есть подсказка для меня?

Чего я хочу добиться, так это отсортировать список баллов следующим образом:

X=-5.000000, Y=5.000000, Z=-2.000000
X=-5.000000, Y=2.000000, Z=-2.000000
X=-5.000000, Y=-5.000000, Z=-2.000000
X=-5.000000, Y=-5.000000, Z=-2.000000
X=-2.000000, Y=-5.000000, Z=-2.000000
X=-2.000000, Y=-5.000000, Z=-2.000000
X=5.000000, Y=-5.000000, Z=-2.000000
X=5.000000, Y=-5.000000, Z=-2.000000
X=5.000000, Y=-2.000000, Z=-2.000000
X=5.000000, Y=-2.000000, Z=-2.000000
X=5.000000, Y=5.000000, Z=-2.000000
X=5.000000, Y=5.000000, Z=-2.000000
X=2.000000, Y=5.000000, Z=-2.000000
X=2.000000, Y=5.000000, Z=-2.000000

1 ответ

Решение

С обновлением это теперь довольно тривиально. Вы хотите отсортировать баллы по atan2(p1.y,p1.x) < atan2(p2,y, p2,x),

Другие вопросы по тегам