Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.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++ 在三维空间中查找紧密的点对_C++_Algorithm - Fatal编程技术网

C++ 在三维空间中查找紧密的点对

C++ 在三维空间中查找紧密的点对,c++,algorithm,C++,Algorithm,我有一组3D点,它们是根据(X->Y->Z)坐标排序的。有些点(2个或3个或更多)彼此非常接近。我想找到它们并将它们移动到一个点 我搜索了一下,但我找到的大多数算法只适用于2D。请注意,我不想删除任何点。我只想移动接近的一个位置(缝合)。 我只是在寻找一个算法,或者在C++中有任何开源的实现。p> 在这种情况下,在距离测量功能中增加额外尺寸后,为什么二维工作的alghoritms不能工作?你在寻找什么样的复杂性?是什么阻止您实现默认的O(n^2)解决方案?通过离散坐标将空间划分为立方体单元。类似

我有一组3D点,它们是根据(X->Y->Z)坐标排序的。有些点(2个或3个或更多)彼此非常接近。我想找到它们并将它们移动到一个点

我搜索了一下,但我找到的大多数算法只适用于2D。请注意,我不想删除任何点。我只想移动接近的一个位置(缝合)。
我只是在寻找一个算法,或者在C++中有任何开源的实现。p> 在这种情况下,在距离测量功能中增加额外尺寸后,为什么二维工作的alghoritms不能工作?你在寻找什么样的复杂性?是什么阻止您实现默认的O(n^2)解决方案?通过离散坐标将空间划分为立方体单元。类似于x、y和z的int(x/2d)。如果点位于相同/相邻的立方体单元中,请将其分组。如果您想要球形单元,请执行附加检查。@rxu球形单元不是一个好主意,因为它们不能无重叠,这会立即要求它们具有重影层,这会使事情复杂化并降低性能。立方体细胞是前进的方向,穿越甚至可以平行化。@Heri Menke yea。可能最简单的方法是选择一个足够大的d并进行int(x/d),然后将所有内容分组到同一个立方体单元中。不太准确,因为两个单元之间的边界可以将彼此靠近的点划分为两个不同的单元。您正在寻找点群集。在上面搜索可能有用。举个例子:在距离测量功能中增加额外的尺寸后,为什么在2D中工作的alghoritms在这种情况下不工作?你在寻找什么样的复杂性?是什么阻止您实现默认的O(n^2)解决方案?通过离散坐标将空间划分为立方体单元。类似于x、y和z的int(x/2d)。如果点位于相同/相邻的立方体单元中,请将其分组。如果您想要球形单元,请执行附加检查。@rxu球形单元不是一个好主意,因为它们不能无重叠,这会立即要求它们具有重影层,这会使事情复杂化并降低性能。立方体细胞是前进的方向,穿越甚至可以平行化。@Heri Menke yea。可能最简单的方法是选择一个足够大的d并进行int(x/d),然后将所有内容分组到同一个立方体单元中。不太准确,因为两个单元之间的边界可以将彼此靠近的点划分为两个不同的单元。您正在寻找点群集。在上面搜索可能有用。一个例子: