如何按顺时针顺序排列 3d 点?

How to order 3d points in clockwise order?

我有一堆 3d 点(一个数组)没有按特定顺序排列,也不限于某些 axis/plane。基于这些点的坐标,我想按顺时针顺序排列数组,如图所示。此刻我不知道从哪里开始。一种想法是找到每个最近点并以某种方式找出方向。

3Dave已经说过了,但这完全取决于相机的位置。

除非您指定截头体,否则没有答案。

请注意,圆是 2D 对象,而不是 3D 对象。 “顺时针”与圆有关。


假设您的意思是在飞机上:

这是两部分的问题。

第一部分非常难。

第二部分相对容易。

第一部分:确实,你在做物体识别:你必须找到一个圆。

为此,调查现有的形状识别技术,或阅读 https://link.springer.com/article/10.1007/s11042-018-6167-2

等内容

对于第二部分:(在第一部分之后几乎不相关)。只需获取每个点相对于您找到的圆的 center 的坐标,只需计算每个点与顶部的角度,然后对它们进行排序。


便宜的游戏类解决方案

如果你想要便宜的解决方案,你可以使用如果要点“合理” ..

  1. 求出所有点的质心(只是所有点的平均值)

  2. 将每个点写成从质心到点的向量

  3. 选择任何一个点作为“顶部”

  4. 使用类似这样的方法https://docs.unity3d.com/ScriptReference/Vector3.Angle.html从“顶部”的角度获取每个角度

  5. 瞧!把它们整理好

在实践中,您可能还需要这些东西:

  1. 找到点所在的“平面”(找到它们所在的“平均平面”,这个比较容易,自己查查!)

  2. 通过垂直于平面的质心做一个轴