如何按顺时针顺序排列 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 的坐标,只需计算每个点与顶部的角度,然后对它们进行排序。
便宜的游戏类解决方案
如果你想要便宜的解决方案,你可以使用如果要点“合理” ..
求出所有点的质心(只是所有点的平均值)
将每个点写成从质心到点的向量
选择任何一个点作为“顶部”
使用类似这样的方法https://docs.unity3d.com/ScriptReference/Vector3.Angle.html从“顶部”的角度获取每个角度
瞧!把它们整理好
在实践中,您可能还需要这些东西:
找到点所在的“平面”(找到它们所在的“平均平面”,这个比较容易,自己查查!)
通过垂直于平面的质心做一个轴
我有一堆 3d 点(一个数组)没有按特定顺序排列,也不限于某些 axis/plane。基于这些点的坐标,我想按顺时针顺序排列数组,如图所示。此刻我不知道从哪里开始。一种想法是找到每个最近点并以某种方式找出方向。
3Dave已经说过了,但这完全取决于相机的位置。
除非您指定截头体,否则没有答案。
请注意,圆是 2D 对象,而不是 3D 对象。 “顺时针”与圆有关。
假设您的意思是在飞机上:
这是两部分的问题。
第一部分非常难。
第二部分相对容易。
第一部分:确实,你在做物体识别:你必须找到一个圆。
为此,调查现有的形状识别技术,或阅读 https://link.springer.com/article/10.1007/s11042-018-6167-2
等内容对于第二部分:(在第一部分之后几乎不相关)。只需获取每个点相对于您找到的圆的 center 的坐标,只需计算每个点与顶部的角度,然后对它们进行排序。
便宜的游戏类解决方案
如果你想要便宜的解决方案,你可以使用如果要点“合理” ..
求出所有点的质心(只是所有点的平均值)
将每个点写成从质心到点的向量
选择任何一个点作为“顶部”
使用类似这样的方法https://docs.unity3d.com/ScriptReference/Vector3.Angle.html从“顶部”的角度获取每个角度
瞧!把它们整理好
在实践中,您可能还需要这些东西:
找到点所在的“平面”(找到它们所在的“平均平面”,这个比较容易,自己查查!)
通过垂直于平面的质心做一个轴