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