Algorithm 如何对三维点进行排序?

Algorithm 如何对三维点进行排序?,algorithm,sorting,3d,point,Algorithm,Sorting,3d,Point,假设在3D中有一些点。您希望按递增或递减顺序对其进行排序。在排序时不考虑CW/CW。如何排序?对3D点进行排序的一种方法是比较它们的大小——它们与原点的距离(0,0,0)——这可以使用3D类似的毕达哥拉定理进行计算: 然后,您将有一个浮点数/双精度浮点数列表,可以使用任何常规排序算法进行排序 不过,这只是最常用的方法。有无数种方法可以比较3D点,其中一些方法比其他方法更合理。例如,哪个是“较大”点,(1,0,0)或(-10,-50,5)?比较X或Y坐标表明前者更大,而比较Z坐标或幅值则表明后者

假设在3D中有一些点。您希望按递增或递减顺序对其进行排序。在排序时不考虑CW/CW。如何排序?

对3D点进行排序的一种方法是比较它们的大小——它们与原点的距离(0,0,0)——这可以使用3D类似的毕达哥拉定理进行计算:

然后,您将有一个浮点数/双精度浮点数列表,可以使用任何常规排序算法进行排序


不过,这只是最常用的方法。有无数种方法可以比较3D点,其中一些方法比其他方法更合理。例如,哪个是“较大”点,(1,0,0)或(-10,-50,5)?比较X或Y坐标表明前者更大,而比较Z坐标或幅值则表明后者更大。这些答案都不是完全正确或错误的;这实际上取决于您需要应用程序做什么。

增加或减少什么顺序?你必须首先弄清楚这个概念,如果它是可测量的,那么它会增加或减少,你在这里的测量是什么?你首先需要定义你的顺序。任何排序都需要有一种独特的方式来定义
a>b
,它遵循各种规则(例如
a>b
b>c
意味着
a>c
)。我所知道的这些东西没有标准的排序方法,所以你需要定义你自己的排序方法(例如按x排序,然后按y排序,然后按z排序)。你试图对三维数据排序的事实可能是你问题的根源。也许再多了解一下你为什么要这样做,我们可能会提供更多帮助。CW/CCW是什么意思?答案是“你想怎么做就怎么做”。实际上,有无数种方法可以对它进行排序。我认为这不是唯一明智的方法。这真的取决于你在做什么。它也不够独特。如何排序
(1,0,0)
(0,1,0)
?距离比较甚至没有定义严格的顺序。您将无法获得可预测的排序。我想您还需要使用稳定的排序算法来适应这样的数据集。但这并不是我想说的重点;比较3D点本身是没有意义的,所以我们把它们转换成有意义的东西来比较——大小。这是用于复数的方法,它不能直接使用“大于”之类的概念,但可以通过计算它们的绝对值在某种程度上进行比较。当然,如果量级在OP的特定应用中没有用处,那么使用它是没有意义的。但我想不出还有什么比这更有用的了;我认为这是因为比较震级是比较3D点的唯一好方法。回想起来,这句话的措辞相当糟糕。我相应地编辑了我的答案,并添加了一条注释,即真实答案取决于OP的应用程序需要什么。