例如,限制空間爲100 x 100 x 100大,每個球的半徑爲5,我需要生成100個這樣的球在此空間內的隨機位置和不允許重疊。我想出了兩種方法:在有限空間內隨機位置生成100個球(有半徑且不重疊)
使用函數srand並獲得100個位置,然後做一個檢查,以刪除彼此重疊的球(檢查兩個球中心的距離小於兩倍半徑),然後生成另外的x個球(x是刪除的球的數量)並且繼續重複該過程直到100個球不重疊。
首先將空間分成100個立方體,並使用
srand
將每個球放置在其分配的立方體內,這樣它們就不會重疊。
我覺得第一種方式是更恰當的隨機方面,但太耗費時間和第二種方式是快速和容易的,但我不知道有關的隨機的想法在那裏。這個模型試圖模擬空氣中分子的位置。也許這兩種方式都不好,請讓我知道是否有更好的方法。提前致謝!
編輯: @將提供給我一個類似的選項,但比我原來的第一種方法更清潔;每次添加一個新球時,檢查它是否與任何現有球重疊,如果有,重新生成。複雜度爲1 + 2 + 3 ... +(n-1),約爲O(n^n)。我仍然想知道是否有更快的算法。
EDIT2: 對不起1 + 2 + ... n應爲n^2
第二個。什麼,你需要這個答案嗎?我寧願在算法上少一些,也不願意真正隨機。第三個選項,丟球。然後將球放入尚未覆蓋的區域。如果你能算出這個算法,你可能應該有一個主人。正如我已經提到的那樣,我有一個清除器。 – Will
感謝您回覆@ Will,雖然我在理解「derp」這個詞時有些困難(不是本地人)。我現在在大學,只是幫助我朋友的化學研究。當你說主人時,你是否認爲這是一個非常深刻的問題?我認爲你的第三個選擇其實很棒。每次我生成一個新球時,我都會檢查它是否與現存重疊,如果有,重新生成。非常感謝! – Arch1tect
對於你的編輯,你建議1 + 2 + 3 ... + n-1的複雜度是O(n^n),但它實際上是O(n^2)。 – enderx1x