Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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++ 给定三维空间中的N个点,如何找到包含这N个点的最小球体?_C++_Algorithm_Data Structures - Fatal编程技术网

C++ 给定三维空间中的N个点,如何找到包含这N个点的最小球体?

C++ 给定三维空间中的N个点,如何找到包含这N个点的最小球体?,c++,algorithm,data-structures,C++,Algorithm,Data Structures,给定三维空间中的N个点,如何找到包含这N个点的最小球体?这个问题称为最小封闭球问题。(用谷歌搜索本学期的相关教程和论文) 这里有一个实现:C++中。p> 它的2d案例(找到一个圆来封闭平面中的所有点)是计算几何课程中教授的一个经典例子。3D只是2D案例的简单扩展 解决这个问题的一个算法是增量风格。从4个点开始,它们固定一个球体,当添加第5个点时,有两种情况: 点在球体中。不需要更新 离题了。在这种情况下,需要更新球体。那么一个非常重要的属性就是这个新点必须在你的新球体上 根据以上观察,您的问题会

给定三维空间中的N个点,如何找到包含这N个点的最小球体?

这个问题称为最小封闭球问题。(用谷歌搜索本学期的相关教程和论文)

这里有一个实现:C++中。p> 它的2d案例(找到一个圆来封闭平面中的所有点)是计算几何课程中教授的一个经典例子。3D只是2D案例的简单扩展

解决这个问题的一个算法是增量风格。从4个点开始,它们固定一个球体,当添加第5个点时,有两种情况:

  • 点在球体中。不需要更新

  • 离题了。在这种情况下,需要更新球体。那么一个非常重要的属性就是这个新点必须在你的新球体上


  • 根据以上观察,您的问题会变小。请参阅第4.7节。它也可以在谷歌图书上找到

    问题归结为找到N个点的凸包。大多数凸包算法,如分治算法、礼品包装算法或Jarvis March和Timothy Chan的算法也可以应用于3D。在所有这些算法中,Timothy Chan的算法是已知的最好的算法。

    对于这个问题,有几种算法和实现

    • 对于2D和3D,可能是最快的

    • 对于更高的维度(比如高达10000),请看一看,这是Gärtner、Kutz和Fischer算法的实现(注:我是合著者之一)

    • 对于非常高的维度,核心集(近似)算法将更快


    <强>注:< /强>如果你正在寻找一个算法来计算最小的包围球的球,你会在C++中找到一个C++实现。(您不需要使用所有CGAL;只需提取所需的头文件和源文件即可。)

    这不是编程问题,而是数学问题。