【问题标题】:Ordering a set of points in 3D space在 3D 空间中对一组点进行排序
【发布时间】:2016-07-25 21:09:35
【问题描述】:

我在 3D 系统中有一组坐标,这些点是随机生成的。我试图根据他们在 Room 中的位置来订购它们,没有任何success 的迹象。

我想做的是让订单看起来更像螺旋。

我尝试订购 X、Y 和 Z 以获得螺旋曲线,但结果更糟糕,在图像中您可以看到点 Nr 29 的位置错误!

这里的任何人都可以告诉我如何订购它们。 PS:点的集合可以改变,因为我需要在订单背后有一个逻辑+我不要求代码!

提前致谢!

【问题讨论】:

    标签: algorithm 3d geometry


    【解决方案1】:
    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坐标的点并计算它们围绕中心(x0,y0)

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

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

      如果您的点嘈杂,则使用接近的Z 坐标而不是相同的坐标。并且可以添加连通分量分析来调整顺序。

    【讨论】:

      【解决方案2】:

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

      将 Z 轴分成多个区间,例如[0,4[, [4,8[, ...

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-11
        • 1970-01-01
        • 2013-06-10
        • 2019-03-06
        • 2014-03-04
        • 2021-05-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多