在三维空间中,我有一个无序的包含6个点的集合,类似于以下内容:
(A)*
(C)*
(E)*
(F)*
(B)*
(D)*
这些点形成了一个三维轮廓,但它们是无序的。所谓无序是指它们以
unorderedList = [A - B - C - D - E - F]
我只想重新组织这个列表,从一个任意点开始(比如点A),并按顺时针或逆时针方向遍历点。类似于这样:
orderedList = [A - E - B - D - F - C]
或者orderedList = [A - C - F - D - B - E]
我正在尝试实现一个尽可能简单的算法,因为涉及到大约420,000个点网格的每个顶点的N环邻域,而我需要为网格上的每个点执行此操作。
一段时间前有一个关于2-D中点的类似讨论,但目前对我来说还不清楚如何从这种方法转移到我3-D的场景。
atan2
函数外都很好,在平面上应该使用向量积来比较点。 - unkulunkuluatan2
没有什么问题。然而,unkulunkulu 的建议也很有趣!通常(P1 x P2) · Z
会给出一个不一致的排序顺序,但是如果你将它与适当的排序技术(如快速排序或基于枢轴的排序)结合起来,它就能够工作了。这是因为在圆上进行叉积运算时,会问“通过顺时针还是逆时针旋转更快到达那里?”其他排序算法可能会失败。否则,使用叉积是很困难的;例如,如果你尝试按(X x P2) · Z
进行排序,sin
在 0度-180度范围内不可逆!另外,像往常一样,必须小心规范化。 - ninjagecko(0,1)
是0度还是360度时;由于你所述问题的性质是任意的,所以这是任意的。在你的情况下,我不预计这会让你不舒服,因为你的点可能是在一个局部邻域内“非重叠”生成的。 - ninjagecko