2012-04-26 88 views
0

總體目標:給定三維空間中的點列表,我需要在給定點的半徑的情況下圍繞該點生成一個球體,然後在語法上檢查兩個球體之間是否有空間,或者給予某個點更多的領域。代表球體的三維網格

問題:我很難考慮用數據結構來表示一個網格點(代表球體的中心)和周圍的球體,但這些並不總是孔數。

實施例的數據:
點A:(-3,0.25,4)半徑:1.35
點B:(5,6.35,1)半徑:2
點C:(1,0, - 1)半徑:.5

我最初的想法是有一個整數的三維數組,它的大小是加起來的軸的最大值和最小值的絕對值除以你想要的最小精度。然後,您將使用轉換因子將數組位置(整數)轉換爲您正在查找的點的小數點位置。然後,我會用一些數據填充陣列,以表示球體中心周圍存在球體。

我在找的是我應該用來表示這個非整數的三維網格的數據結構。我覺得我的技巧是不正確的。

這是用Java編寫的。

任何和所有的幫助,非常感謝,謝謝!

回答

0

爲什麼不僅用3個座標x,y,z(3d-點)和半徑來表示它們,就像列出它們並使用(3d維度)距離來評估點是否在球體內部一樣? 還是我錯過了這裏的用例?這聽起來像是這樣的:「檢查兩個或更多球體之間是否有空間給定某一點」

0

我本週早些時候做了一些非常類似的事情。 我所做的是決定兩點允許的最小距離(如果我正確地理解了你的話,通過添加兩個球體的半徑來找到你)。使用這個,我用(0,0,0)處的起始球體創建了一個隨機的球體場,然後逐漸增加額外的球體,距離它們有一個隨機的距離。 因爲在我的情況(不知道你是否也需要這個),我也有一個最大距離,我剛剛移動了一個已經接受的球體的座標,並檢查距離是否匹配。

因此,要總結:

  1. 有一個起點
  2. 隨機放置一個點(在特定範圍內)到您現有的點之一
  3. 檢查它是否符合你的間距限制
  4. 重複2-3,直到你有足夠的球體。

希望對任何人都有幫助。