我有 3d (x,y,z) 中的点列表对于每个列表,我想将该列表分为两个列表,一个包含来自剖面上半部分的点,第二个包含下半部分,就像这样:
我的问题是如何确定哪一点应该去上半部分,哪一个应该去下半部分,仅仅通过这些点的坐标(x,y,z)。
我有 3d (x,y,z) 中的点列表对于每个列表,我想将该列表分为两个列表,一个包含来自剖面上半部分的点,第二个包含下半部分,就像这样:
我的问题是如何确定哪一点应该去上半部分,哪一个应该去下半部分,仅仅通过这些点的坐标(x,y,z)。
由于可以通过多种方式将点拆分为“两半”,因此最好有更多的标准来拆分它们。
在这种情况下,您似乎正在寻找一条分割点云的曲线,其形状与该云相似。可以覆盖您的形状的拟合曲线会有所帮助。可能二阶或三阶多项式适合这些形状。
第二个想法是创造一些通过“几何中间”的东西。在 2D 情况下,您可以使用中轴方法。可以通过 Delaunay 三角剖分计算点云。如果点在某个平面附近,您可以将它们投影到平面上并使用这种方法。
首先,在每个相邻点之间创建“线”。假设这些点在循环周围按顺序给出,这应该很容易。
然后,从0,0
(左上角)到每个点画一条线。如果它与另一条线相交到达那里,它不在上面。如果没有,那就是。
它是 O(n^2),所以我确信有更好的解决方案,但是对于小点集,应该没问题。请注意,它不适用于非常凹的形状,但适用于所有显示的形状。
连接相邻边得到线。以逆时针角度为正。在云的上部,连续的线具有增加的角度。而在下部,连续的线具有减小的角度。
一个小试验和错误应该引导你到一个适当的启发式..