网格切片的排序算法

时间:2016-05-09 08:27:32

标签: c++ sorting 3d outlining

我遇到了3D打印机软件排序算法的问题。我将给定.stl文件的切片的xyz数据作为具有三列和n行的向量,其中n是每个切片的点数。

因此,向量的代码如下所示:

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

因此矩阵是我的向量,包含网格中所有点的所有坐标。

当我打印出点的坐标时,我得到一个未排序的列表。因此,下面的列表显示了立方体的第一层/切片的点,尺寸为10x10x10mm。

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

所以这个结果显示在这个图中。 Unsorted points

我的第一种方法是对点进行排序,但结果远远不是我需要的。 sorted

排序列表如下所示

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

enter image description here

1 个答案:

答案 0 :(得分:2)

随着更新,这现在相当微不足道。您想按atan2(p1.y,p1.x) < atan2(p2,y, p2,x)对点进行排序。