簡體   English   中英

給定3D空間中的N個點,如何找到包含這N個點的最小球體?

[英]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點時,有兩種情況:

  1. 關鍵在於球體。 無需更新。

  2. 在這一點之外。 在這種情況下,您需要更新球體。 然后一個非平凡的屬性是這個新點必須在你的新球體上!

根據上述觀察,您的問題變得更小。 閱讀本書第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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM