我在3D系统中有一组坐标,这些点是随机生成的。我试图根据他们在Room中的位置来命令他们,没有成功的任何迹象。
我想做的是以一种看起来更像螺旋的方式获得订单。
我试图命令X,Y和Z来获得螺旋曲线,但结果甚至最差,在图像中你可以看到Nr 29指向错误的位置!
这里的任何人都可以给我一个关于如何订购它们的提示。 PS:点数的集合可以改变,因为我需要在订单后面有一个逻辑+我不是要求代码!
提前谢谢!答案 0 :(得分:1)
这是我的建议。它并不完美,但您可能无法找到解决此问题的完美解决方案:
将Z轴分成若干个间隔,例如[0,4 [,[4,8 [,...
首先按照Z坐标所属的间隔对点进行排序。
在每个区间内,按围绕Z轴的旋转角度排序,可以在大多数语言中由atan2(Y,X)
计算。基本上你使用圆柱坐标。
答案 1 :(得分:0)
坐标系
您没有指定哪个轴是哪个轴,因此对于以下情况,我假设螺旋轴与Z
轴平行,该轴指向您的螺旋图。
按Z
坐标升序对点进行排序
查找螺旋轴
这很棘手,取决于许多事情,比如你的螺旋线偏斜,是否存在噪点,分布点的密度等等。最简单的方法是从所有点(或局部区域)和轴获得边界框在它的中间。因此,如果边界框为(xmin,ymin,zmin,xmax,ymax,zmax)
,则中心轴将垂直于Z
轴:
x0=0.5*(xmin+xmax)
y0=0.5*(ymin+ymax)
z0=<zmin,zmax>
如果您需要更复杂的内容,请参阅
按极角分类
所以处理所有要点。找到相同Z
坐标的点,并在中心a
周围计算极角(x0,y0)
a(i)=atan2(y(i)-y0,x(i)-x0)
现在按升序或降序排序(取决于您需要的输出 CW / CCW )。当您按照相同的Z
轴对所有点进行排序时,整个集合应该是螺旋排序的。
如果您的积分有噪音,请使用关闭Z
坐标而不是相同坐标。并且可以添加连通分量分析来调整顺序。