2017-03-22 90 views
0

我試圖用「粒子」(由3D XYZ向量表示)以最佳方式填充3D球體體積,同時需要保持彼此之間的特定距離,同時嘗試最小化量他們之間存在的自由空間。用較小的球體最佳填充3D球體

雖然有一個捕獲 - 粒子本身可能會落在球形體積的邊界上 - 它們不能在其外部存在。理想情況下,我想最大化落在這個邊界上的粒子數量(這使得這是一種球形填充問題,我想),然後向內填充剩餘的體積。

有沒有可以解決這類事情的任何種算法?它並不需要精確,但關鍵在於最終解決方案的密度需要相當準確(「完美」解決方案的+/- 5%)。

回答

1

您的約束條件有點含糊不清,所以很難說,但我會嘗試使用字段方法。第一次看到:

和子鏈接在這裏你可以找到這種方法的一些例子。

現在算法中:

  1. 地方N顆粒隨機內球

    N應該是安全的低,因此它更小那麼你的解決方案的粒子計數。

  2. 開始場模擬

    所以使用您的解決方案規則創建的吸引力和排斥力,推動通過牛頓D'蘭伯特物理學的粒子。不要忘記增加摩擦力(所以運動將在一段時間後停止)和球體積邊界。

  3. 停止當你的粒子停止移動

    所以如果max(|particles_velocity|)<threshold停止。

  4. 現在檢查是否所有的粒子都正確放置

    沒有違反任何規則。如果是,那麼記住這個位置作爲解決方案,並再次嘗試從#1N+1顆粒。如果不停止並使用最後的正確解決方案。

    爲了加快速度,您可以添加更多的粒子,而不是使用類似於二分查找的(N+1)(添加32個粒子,直到您可以...然後只是16 ...)。另外,您不需要在其他運行中使用#1中的隨機位置。您可以讓其他粒子開始放置在上次運行解決方案中的位置。

如何確定解決方案的準確性是完全不同的問題。由於您沒有提供確切的規則,我們只能猜測。我會嘗試估計理想的顆粒密度並根據球體積計算理想的顆粒計數。你也可以使用這個來初始猜測N,然後和最後的N比較。

1

沒有一個公式用球體最佳地填充球體。在this維基百科頁面上,您可以看到的最佳配置n < = 12。對於的最佳配置n < = 500您可以查看this網站。正如你在這些網站上看到的,不同數量的球體有不同的最佳對稱組。