【发布时间】:2016-09-30 16:54:57
【问题描述】:
我有一组 3D 点,它们都位于同一个平面上。这些点只是文本文件中的“x y z”条目。 我想找到一种方法对这些点进行排序,以便我可以通过所有点绘制一个简单的多边形。我有几个想法:
想法 1: 选择一个已知位于由点集定义的多边形内的点,然后将射线绘制到该点集中的任意点。然后使用某种角度函数以按角度找到距离第一个最近的点,然后以此类推。这个想法的问题是我不知道如何找到一个保证在该区域内的点。我想使用质心,但并非所有这些集合都是凸的。它们可能看起来像以下两个图像中的任何一个:
正如您在第二张图片中看到的那样,质心可能不在多边形内,实际上如果拐角处的转折点太陡,那么我想到的角度函数也可能不起作用。
想法 2: 这似乎是可以根据旅行商问题之类的问题来解决的更容易的问题之一。但我知道解决 TSP 有很多不同的特定解决方案和近似值,我对从哪里开始有点生疏。
想法 3: 使用一个简单的距离函数,该函数将从任意点开始,找到最接近它的点,然后找到最接近 那个等等。这似乎是最容易做到的,但我想知道我是否没有预见到会出现任何问题。
对于解决此问题的最佳方法以及我是否忽略了更简单的方法,我将不胜感激。我正在用 C++ 进行编程,因此另一个好的答案将包括可以执行诸如查找 3d 质心或解决 TSP 等操作的库或函数。在此先感谢您的帮助。
【问题讨论】:
-
您可以尝试“剪耳”算法来构建正确的多边形网格。