Cod*_*its 10 sorting algorithm geometry mesh
在三维空间中,我有一组无序的,比如6分; 这样的事情:
(A)*
(C)*
(E)*
(F)*
(B)*
(D)*
Run Code Online (Sandbox Code Playgroud)
这些点形成三维轮廓,但它们是无序的.对于无序我的意思是他们存储在一个
unorderedList = [A - B - C - D - E - F]
Run Code Online (Sandbox Code Playgroud)
我只是想从任意位置开始重新组织这个列表(让我们说A点)并顺时针或逆时针遍历点.像这样的东西:
orderedList = [A - E - B - D - F - C]
Run Code Online (Sandbox Code Playgroud)
要么
orderedList = [A - C - F - D - B - E]
Run Code Online (Sandbox Code Playgroud)
我正在尝试尽可能简单地实现算法,因为提到的点集对应于~420000点的网格上的每个顶点的N环邻域,并且我必须对网格上的每个点执行此操作.
前段时间对二维中的点进行了类似的讨论,但目前我不清楚如何从这种方法转向我的三维场景.
没有轴和方向,"顺时针"或"逆时针"的概念没有明确定义!(证据:例如,如果你从显示器屏幕的另一侧观察这些点,或者将它们翻转,会怎样!)
您必须定义轴和方向,并将其指定为附加输入.指定方法包括:
1x=2y=3z
),使用右手规则(A_x, A_y, A_z)
,使用右手规则; 这是这样做的首选方式为了确定方向,您必须更深入地研究您的问题:您必须定义网格的"向上"和"向下"大小.然后,对于每组点,您必须采用质心(或另一个"内部"点)并构造一个指向"向上"的单位向量,该向量与表面垂直.(实现此目的的一种方法是找到最小二乘拟合平面,然后找到通过该点的两个垂直向量,从"向上"方向选择一个.)
您需要使用上述任何建议来确定您的轴.这将允许您按如下方式重新表述您的问题:
输入:
建立:
算法:
一旦你有角度,你可以只对它们进行排序.