在3D空間中給定N個點,如何找到包含這N個點的最小球體?在3D空間中給定N個點,如何找到包含這N個點的最小球體?
3
A
回答
8
這個問題被稱爲最小封閉球問題。 (谷歌這個詞來尋找教程和論文)。
下面是一個實現:http://www.inf.ethz.ch/personal/gaertner/miniball.html在C++中。
它的第2種情況(找到一個圓圈以包圍飛機上的所有點)是計算幾何課程中教授的經典示例。 3D只是2D情況下的一個簡單擴展。
這個問題的一種算法是增量式。你開始連得4分,他們修復了球,當你加5個點,有兩種情況:
點是在球體。無需更新。
以外的點。在這種情況下,你需要更新你的球體。然後一個非平凡的財產是這個新點必須在你的新領域!
基於上述觀察,您的問題變得更小。閱讀this book的第4.7節。它也可以在谷歌的書上。
1
問題歸結爲找到N個點的凸包。大多數像分而治之的凸包算法,禮物包裝或Jarvis March和Timothy Chan的算法都可以應用於3D。在所有這些算法中,Timothy Chan的算法是已知的最佳算法。
0
這個問題有幾種算法和實現。
對於2D和3D,Gärtner's implementation可能是最快的。對於更高維度(高達10,000,比如說),看看https://github.com/hbf/miniball,這是Gärtner,Kutz和Fischer算法的實現(注:我是其中一個合着者)。
對於非常非常高的尺寸,核心集(近似值)算法會更快。
注:如果你正在尋找一種算法來計算領域的最小包圍球,你會發現在一個Computational Geometry Algorithms Library (CGAL) C++實現。 (您不需要使用全部CGAL;只需提取所需的頭文件和源文件。)
相關問題
- 1. 給定N個點中包含K個點的最小面積的正方形
- 2. PostGIS:如何找到給定集的N個最接近點集?
- 3. 如何在N點中間找到一個點?
- 4. 如何從包含給定點的一組點中找出最小的N維單形?
- 5. 查找cuda中n個點之間的最小距離
- 6. 快速找到最小的n,這樣對於X <= n * n
- 7. 在d維空間中查找一組n個點的直徑
- 8. 在圖中給出N個節點,其中包含最大距離
- 9. 如何在給定的時間內找到第n個謎語?
- 10. 如何找到當前節點(n)和前一個節點(n-1)的差異
- 11. 從一組n個點中找出m個最遠點
- 12. 如何找到2D空間中給定點的最窄波段?
- 13. 在有向加權圖中找到給定節點的n個最接近節點的最快方法
- 14. 給定一組點,找到最小的子集點,從中可以繪製n個直徑的圓圈以包含所有點
- 15. 包含n個節點的最佳圖形路徑
- 16. 如何在Gremlin中找到包含在N個頂點集合中的特定長度的所有路徑
- 17. 如何在n維空間中找到k最接近的值?
- 18. 小數點後加n個零點
- 19. 在Python中找到3D中給定點的最近點的最快方法
- 20. 如何在WPF中內插N個點
- 21. JCL找到給定n個數據集
- 22. n元樹中的最小節點
- 23. 如何找到非二叉樹中的第n個節點?
- 24. 如何找到球體上的點與線之間的最小距離
- 25. x的最優值得到最平滑的曲線f(x)給定N個點
- 26. 如何在Unity中的3D點繪製球體或點?
- 27. 如何在給定中心點和半徑大小時繪製一個球體?
- 28. 壁球n提交到一個,當n包括合併
- 29. 確定三維空間中一個點的位置,給定與已知座標的N點的距離
- 30. 找到給出凸polgyon等一批N個點
這不是一個編程問題,它是一個數學問題。 – Ether 2010-03-07 16:47:08