У меня возникла проблема с алгоритмами сортировки для программного обеспечения 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
вам нужно знать, как соединяются ваши точки, нет никакого способа обойти это. если вы знаете, например, что ваши точки всегда определяют выпуклый набор (например, ваш куб), тогда [нахождение выпуклого корпуса] (https://en.wikipedia.org/wiki/Graham_scan) среза позволит вам восстановить это информации, иначе вы ввернуты. – BeyelerStudios