【发布时间】:2016-07-25 21:09:35
【问题描述】:
我在 3D 系统中有一组坐标,这些点是随机生成的。我试图根据他们在 Room 中的位置来订购它们,没有任何success 的迹象。
我想做的是让订单看起来更像螺旋。
我尝试订购 X、Y 和 Z 以获得螺旋曲线,但结果更糟糕,在图像中您可以看到点 Nr 29 的位置错误!
这里的任何人都可以告诉我如何订购它们。 PS:点的集合可以改变,因为我需要在订单背后有一个逻辑+我不要求代码!
提前致谢!
【问题讨论】:
我在 3D 系统中有一组坐标,这些点是随机生成的。我试图根据他们在 Room 中的位置来订购它们,没有任何success 的迹象。
我想做的是让订单看起来更像螺旋。
我尝试订购 X、Y 和 Z 以获得螺旋曲线,但结果更糟糕,在图像中您可以看到点 Nr 29 的位置错误!
这里的任何人都可以告诉我如何订购它们。 PS:点的集合可以改变,因为我需要在订单背后有一个逻辑+我不要求代码!
提前致谢!
【问题讨论】:
坐标系
您没有指定哪个轴是哪个轴,因此对于以下内容,我假设螺旋轴与在您的螺旋图中指向上方的 Z 轴平行。
按Z坐标升序对点进行排序
找到螺旋轴
这很棘手,并且取决于许多因素,例如您的螺旋是否倾斜、是否有噪声点、点分布的密集程度等。最简单的方法是从所有点(或仅局部区域)和轴获取边界框在它的中间。因此,如果边界框是(xmin,ymin,zmin,xmax,ymax,zmax),那么中心轴将是垂直于Z 轴的线:
x0=0.5*(xmin+xmax)
y0=0.5*(ymin+ymax)
z0=<zmin,zmax>
如果您需要更复杂的东西,请参阅
按极角排序
所以处理所有点。找到具有相同Z坐标的点并计算它们围绕中心(x0,y0)
a
a(i)=atan2(y(i)-y0,x(i)-x0)
现在按升序或降序对它们进行排序(取决于您需要的输出CW/CCW)。当您按照相同的Z 轴对所有点进行排序时,整个集合应该是螺旋排序的。
如果您的点嘈杂,则使用接近的Z 坐标而不是相同的坐标。并且可以添加连通分量分析来调整顺序。
【讨论】:
这是我的建议。它并不完美,但您可能找不到解决此问题的完美解决方案:
将 Z 轴分成多个区间,例如[0,4[, [4,8[, ...
首先按照 Z 坐标所属的区间对点进行排序。
在每个区间内,按围绕 Z 轴的旋转角度排序,在大多数语言中可以通过 atan2(Y,X) 计算。基本上你使用的是圆柱坐标。
【讨论】: