假設我們有一個具有N個頂點的3D多面體。 你如何測試一個點是否在時間O(n)內。 應該有一個線性算法,但我的搜索不成功。線性時間的多面體測試點
回答
如果有限定凸多面體(3D版多邊形的)N個點,這意味着得到的形狀是拓撲等價球體。
如果你查找幾個拓撲定理,這並不難證明。基本上,由於沒有內部孔,所以缺少孔將您的多面體放置在與球體相同的幾何對象的「屬」中。然後,您只需將每個頂點(一組N個拉伸)轉換爲距給定內點的某個固定距離R.由於所有這些點現在位於球體的表面上,並且只使用拓撲合法的「拉伸」操作(通過移動它們的頂點來拉伸邊界面),所以凸多面體在拓撲上等同於球體。我省略了正式的條款,因爲它們不會增加太多混亂。
只要你空穴 - 並不等同於球體再添加任何排除內部區域 - 。在這種情況下,你可以使用相同的擴展版本。你測試你是否在多面體的「邊界面」內,然後測試你是否在它的任何一個洞內(它們也是多面體)。你需要一些額外的標誌或條款孔位於外多面體的一部分,等
可能您正在使用給定頂點的凸包。
計算凸包(O(N log n)的),並發現是在多面體點(O(N))具有複雜度O(N log n)的。
如果點不在凸多面體比有分隔點和多面體的平面。在2D中,很容易找到從點到多面體頂點的矢量之間的分離平面測試角度。對於3D我不知道如何做到這一點(在O(n))。
解決方案是: 由於多面體在拓撲上等價於一個球體,因此它的面(和邊)數爲O(n)(因爲它相當於一個平面圖,... - 需要一個簡短的證明)。只需迭代所有面並進行類似於2D中的點中多邊形測試的光線投射,實際上將在O(n)中運行,因爲只有O(n)個面。
等等,什麼?一個低調的,但接受的答案? –
- 1. 線程測試的時間
- 2. 測試多時間
- 3. 多線程性能和性能測試
- 4. 測試三維點是否在三維多面體內
- 5. 用多媒體中間件測試django頁面
- 6. 嘗試訪問CGAL多面體頂點
- 7. 測量多線程的執行時間
- 8. 多線程程序的測量時間
- 9. 多線程測試
- 10. 測試多線程
- 11. 性能測試 - 測試:配置文件與測試:基準測試,壁掛時間與處理時間對比
- 12. 測試多個時間序列的平穩性
- 13. 使用點測試找到兩個四面體的交點
- 14. 單元測試,黑盒測試時需要多長時間?
- 15. 當存在因素時測試多重共線性
- 16. 球體表面上的測地線(最短距離路徑)之間的交點
- 17. 如何計算凸多面體和另一個多面體之間的交點?
- 18. 多線程完成時間測量
- 19. 測試套件需要多長時間?
- 20. 多核處理時間線性增加
- 21. 平面上點的線性可分性
- 22. 多線程單元測試
- 23. 多線程單元測試
- 24. 多線程鎖測試
- 25. 多線程單元測試
- 26. Inspec測試多個實體
- 27. 銷售點性能測試
- 28. Exlude時間測試
- 29. 在多線程環境中測量線程的執行時間
- 30. robotium測試每次點擊之間的等待時間
不幸的是爲凸多面體不需要內處理孔。無論如何,似乎算法在O(n)中運行的額外要求是多面體是簡單的(在拓撲上相當於一個球體)。這應該意味着它可以變成一個球形的物體,它是凸的,就是它。我只需要考慮這樣一個轉換... – anonymous
那麼,你有面孔定義的多面體? – Ante
我想我現在有解決方案。由於多面體在拓撲上等價於球體,因此它的面(和邊)數爲O(n)(因爲它相當於一個平面圖,... - 需要一個簡短的證明)。只需迭代所有面並進行類似於2D中的點中多邊形測試的光線投射,實際上將在O(n)中運行,因爲只有O(n)個面。 – anonymous