![](/img/trans.png)
[英]How to find N points on an infinite axis so that sum of distances from M points to its nearest N is smallest?
[英]Given N points in a 3D space, how to find the smallest sphere that contains these N points?
給定3D空間中的N個點,如何找到包含這N個點的最小球體?
這個問題被稱為最小封閉球問題。 (谷歌這個術語,以找到它上面的教程和論文)。
這是一個實現: http : //www.inf.ethz.ch/personal/gaertner/miniball.html in c ++。
它的2d情況(找到一個圓圈來包圍平面中的所有點)是計算幾何課程中教授的經典示例。 3D只是2D案例的簡單擴展。
這個問題的一種算法是增量式。 你從4點開始他們修復一個球體,當你添加第5點時,有兩種情況:
關鍵在於球體。 無需更新。
在這一點之外。 在這種情況下,您需要更新球體。 然后一個非平凡的屬性是這個新點必須在你的新球體上!
根據上述觀察,您的問題變得更小。 閱讀本書第4.7節。 它也可以在谷歌書上找到。
問題歸結為找到N點的凸包。 大多數凸包算法,如分而治之,禮品包裝或Jarvis March和Timothy Chan的算法也可以應用於3D。 在所有這些算法中,Timothy Chan的算法是已知的最佳算法。
這個問題有幾種算法和實現。
對於2D和3D, Gärtner的實施可能是最快的。
對於更高的維度(比如說高達10,000),請查看https://github.com/hbf/miniball ,這是Gärtner,Kutz和Fischer的算法實現(注意:我是其中一個-authors)。
對於非常非常高的維度, 核心集 (近似)算法將更快。
注意:如果你正在尋找一種算法來計算領域的最小包圍球,你會發現在C ++實現計算幾何算法庫(CGAL) 。 (您不需要使用所有CGAL;只需提取所需的頭文件和源文件。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.