在3D空间中排序一组点

时间:2016-04-05 18:47:43

标签: algorithm 3d geometry

我在3D系统中有一组坐标,这些点是随机生成的。我试图根据他们在Room中的位置来命令他们,没有enter image description here成功的任何迹象。

我想做的是以一种看起来更像螺旋的方式获得订单。

enter image description here

我试图命令X,Y和Z来获得螺旋曲线,但结果甚至最差,在图像中你可以看到Nr 29指向错误的位置!

这里的任何人都可以给我一个关于如何订购它们的提示。 PS:点数的集合可以改变,因为我需要在订单后面有一个逻辑+我不是要求代码!

提前谢谢!

2 个答案:

答案 0 :(得分:1)

这是我的建议。它并不完美,但您可能无法找到解决此问题的完美解决方案:

将Z轴分成若干个间隔,例如[0,4 [,[4,8 [,...

首先按照Z坐标所属的间隔对点进行排序。

在每个区间内,按围绕Z轴的旋转角度排序,可以在大多数语言中由atan2(Y,X)计算。基本上你使用圆柱坐标。

答案 1 :(得分:0)

  1. 坐标系

    您没有指定哪个轴是哪个轴,因此对于以下情况,我假设螺旋轴与Z轴平行,该轴指向您的螺旋图。

  2. Z坐标升序对点进行排序

  3. 查找螺旋轴

    这很棘手,取决于许多事情,比如你的螺旋线偏斜,是否存在噪点,分布点的密度等等。最简单的方法是从所有点(或局部区域)和轴获得边界框在它的中间。因此,如果边界框为(xmin,ymin,zmin,xmax,ymax,zmax),则中心轴将垂直于Z轴:

    x0=0.5*(xmin+xmax)
    y0=0.5*(ymin+ymax)
    z0=<zmin,zmax>
    

    如果您需要更复杂的内容,请参阅

  4. 按极角分类

    所以处理所有要点。找到相同Z坐标的点,并在中心a周围计算极角(x0,y0)

    a(i)=atan2(y(i)-y0,x(i)-x0)
    

    现在按升序或降序排序(取决于您需要的输出 CW / CCW )。当您按照相同的Z轴对所有点进行排序时,整个集合应该是螺旋排序的。

    如果您的积分有噪音,请使用关闭Z坐标而不是相同坐标。并且可以添加连通分量分析来调整顺序。