如何在C中按顺时针顺序排列3D点?
我有很多3D点(3D形状横截面上的点),但它们是随机排列的。。。我该如何将它们按正确的顺序排列,以便它们连接在一起时形成3D形状的横截面?我认为答案是“你不能” 这取决于“横截面上的点”的实际含义。至少有3种可能的解释: “横截面上的点”只是浮在截面形状中间的随机点。在这种情况下,一个足够大的圆(和任何其他形状)将包含所有点 b) “横截面上的点”是横截面形状周长上的随机点(例如,12个点可以描述正方形,但没有一个点是角,因此也可以是八角形或其他形状)。在这种情况下,您仍然无法确定形状是什么 c) “横截面上的点”描述横截面形状的角。在这种情况下,考虑这样的点:如何在C中按顺时针顺序排列3D点?,c,C,我有很多3D点(3D形状横截面上的点),但它们是随机排列的。。。我该如何将它们按正确的顺序排列,以便它们连接在一起时形成3D形状的横截面?我认为答案是“你不能” 这取决于“横截面上的点”的实际含义。至少有3种可能的解释: “横截面上的点”只是浮在截面形状中间的随机点。在这种情况下,一个足够大的圆(和任何其他形状)将包含所有点 b) “横截面上的点”是横截面形状周长上的随机点(例如,12个点可以描述正方形,但没有一个点是角,因此也可以是八角形或其他形状)。在这种情况下,您仍然无法确定形状是什么 c
* *
*
* *
它可以是:
*-----*
\ |
,* |
*-----*
…或:
…或其他(至少有4种可能的形状-如果允许“扭曲”,则更多)
无论如何;如果无法确定形状,则无法确定点的正确顺序
如果你增加分数,那就根本没用了。例如,有123.45亿个点看起来都像是一个粗糙的圆(周长有小的凹凸),那么你就不知道它不应该缺少一条穿过中心的小银条
大部分;我认为你需要弄清楚“横截面上的点”是如何创建的,看看你是否可以修改它来提供关于这些点的更多信息。例如,如果(如我所怀疑的)你从一个3D网格(3D空间中的顶点和多边形)开始,然后用一个切割平面将一个横截面切片到其中;然后,您可以跟踪“切片多边形编号”,并将其与对应的一对点关联。听起来您处理的是二维数据集,而不是三维数据集。这将大大简化您的答案。我相信您需要计算点之间的平均距离,以确定哪些点最接近,并且应该彼此“相邻”。在这种情况下,优化至关重要。这里可以看到大量通用排序算法:。我会研究看看什么最适合你的应用。如果点在3D形状的横截面上,它们是共面的,这就是“2D凸包”问题(或凹面)。我不同意按距离排序是一个有效的解决方案;距离其他点最近的点可能位于新多边形的另一侧,而不是序列中的下一个点(如四边形菱形)。假设有3个点形成三角形。它们是顺时针还是逆时针取决于你从哪一边看它们。
*-----*
| /
| * __
*-----*