У меня проблема с алгоритмами сортировки программного обеспечения для 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
С обновлением это теперь довольно тривиально. Вы хотите отсортировать баллы по atan2(p1.y,p1.x) < atan2(p2,y, p2,x)
,
Других решений пока нет …