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

У меня проблема с алгоритмами сортировки программного обеспечения для 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),

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]