Algorithm 在三维空间中对一组点进行排序

Algorithm 在三维空间中对一组点进行排序,algorithm,3d,geometry,Algorithm,3d,Geometry,我在3D系统中有一组坐标,这些点是随机生成的。我试着根据他们在房间里的位置来订购,但没有任何成功的迹象 我想做的是得到一个更像螺旋的订单 我试着对X、Y和Z进行排序以获得螺旋曲线,但结果更糟,在图像中,你可以看到点Nr 29位于错误的位置 这里有人能告诉我怎么点吗。 PS:点的设置可以改变,因为我需要在订单后面有一个逻辑+我不要求代码 提前谢谢 这是我的建议。它并不完美,但您可能无法找到解决此问题的完美方案: 将Z轴拆分为多个间隔,例如[0,4[,[4,8[ 首先按点的Z坐标所属的间隔对点进行

我在3D系统中有一组坐标,这些点是随机生成的。我试着根据他们在房间里的位置来订购,但没有任何成功的迹象

我想做的是得到一个更像螺旋的订单

我试着对X、Y和Z进行排序以获得螺旋曲线,但结果更糟,在图像中,你可以看到点Nr 29位于错误的位置

这里有人能告诉我怎么点吗。 PS:点的设置可以改变,因为我需要在订单后面有一个逻辑+我不要求代码


提前谢谢

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

将Z轴拆分为多个间隔,例如[0,4[,[4,8[

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

在每个间隔内,按Z轴旋转角度排序,在大多数语言中,这可以通过
atan2(Y,X)
计算。基本上,您使用的是柱坐标

  • 坐标系

    您没有指定哪个轴是哪个轴,因此对于以下内容,我假设螺旋轴与螺旋图中指向上的
    Z
    轴平行

  • Z
    坐标升序对点进行排序

  • 查找螺旋轴

    这是很棘手的,取决于很多事情,比如你的螺旋偏斜,有噪声点,点分布有多密集等。最简单的方法是从所有的点(或者仅仅是局部区域)得到边界框,而轴在中间。因此,如果包围盒是代码>(Xmin,Ymin,Zmin,XMAX,YMAX,ZMAX)。那么中心轴将是垂直于

    Z
    轴的线:

    x0=0.5*(xmin+xmax)
    y0=0.5*(ymin+ymax)
    z0=<zmin,zmax>
    
    现在按升序或降序排序(取决于您需要的输出CW/CCW)。当您按同一
    Z
    轴对所有点进行排序时,整个集合应按螺旋顺序排列

    如果您的点有噪声,则使用闭合
    Z
    坐标,而不是相同的坐标。并且可能需要添加连接的组件分析来调整顺序

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