Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C中按顺时针顺序排列3D点?_C - Fatal编程技术网

如何在C中按顺时针顺序排列3D点?

如何在C中按顺时针顺序排列3D点?,c,C,我有很多3D点(3D形状横截面上的点),但它们是随机排列的。。。我该如何将它们按正确的顺序排列,以便它们连接在一起时形成3D形状的横截面?我认为答案是“你不能” 这取决于“横截面上的点”的实际含义。至少有3种可能的解释: “横截面上的点”只是浮在截面形状中间的随机点。在这种情况下,一个足够大的圆(和任何其他形状)将包含所有点 b) “横截面上的点”是横截面形状周长上的随机点(例如,12个点可以描述正方形,但没有一个点是角,因此也可以是八角形或其他形状)。在这种情况下,您仍然无法确定形状是什么 c

我有很多3D点(3D形状横截面上的点),但它们是随机排列的。。。我该如何将它们按正确的顺序排列,以便它们连接在一起时形成3D形状的横截面?

我认为答案是“你不能”

这取决于“横截面上的点”的实际含义。至少有3种可能的解释:

“横截面上的点”只是浮在截面形状中间的随机点。在这种情况下,一个足够大的圆(和任何其他形状)将包含所有点

b) “横截面上的点”是横截面形状周长上的随机点(例如,12个点可以描述正方形,但没有一个点是角,因此也可以是八角形或其他形状)。在这种情况下,您仍然无法确定形状是什么

c) “横截面上的点”描述横截面形状的角。在这种情况下,考虑这样的点:

*     *

  *
*     *
它可以是:

*-----*
 \    |
 ,*   |
*-----*
…或:

…或其他(至少有4种可能的形状-如果允许“扭曲”,则更多)

无论如何;如果无法确定形状,则无法确定点的正确顺序

如果你增加分数,那就根本没用了。例如,有123.45亿个点看起来都像是一个粗糙的圆(周长有小的凹凸),那么你就不知道它不应该缺少一条穿过中心的小银条


大部分;我认为你需要弄清楚“横截面上的点”是如何创建的,看看你是否可以修改它来提供关于这些点的更多信息。例如,如果(如我所怀疑的)你从一个3D网格(3D空间中的顶点和多边形)开始,然后用一个切割平面将一个横截面切片到其中;然后,您可以跟踪“切片多边形编号”,并将其与对应的一对点关联。

听起来您处理的是二维数据集,而不是三维数据集。这将大大简化您的答案。我相信您需要计算点之间的平均距离,以确定哪些点最接近,并且应该彼此“相邻”。在这种情况下,优化至关重要。这里可以看到大量通用排序算法:。我会研究看看什么最适合你的应用。如果点在3D形状的横截面上,它们是共面的,这就是“2D凸包”问题(或凹面)。我不同意按距离排序是一个有效的解决方案;距离其他点最近的点可能位于新多边形的另一侧,而不是序列中的下一个点(如四边形菱形)。假设有3个点形成三角形。它们是顺时针还是逆时针取决于你从哪一边看它们。
*-----*
|   / 
| * __
*-----*