2011-02-23 53 views
0

有沒有辦法找出2個球體之間的交集距離?我明白當兩個球體相交形成圓形時。但是,我想要突破的是我需要將圈子1推到外面,這樣他們纔不會相交,並且處於他們只是互相接觸的地步。我擁有的唯一數據是球體的中心和它們各自的半徑。球體 - 球體交集:距離向量

感謝

+1

嘗試http://math.stackexchange.com –

回答

0

如果您知道這兩個領域重疊,那麼你可以計算其中心之間的距離。然後,您可以將兩個球體的半徑相加,以獲得球體必須彼此之間的最小距離,以便它們僅接觸一個點。兩者之差(半徑之和減去中心之間的距離)應該是球體需要彼此分開以使它們僅接觸一點的量。

+0

@ templatetypedef-這只是一個巧合,出答案是相同的:) – Mahesh

+0

@ Mahesh-不是數學真棒?兩個從未見過面的人可以在相同的問題上工作,並在幾秒鐘內得到相同的答案。 :-) – templatetypedef

+0

是的,數學是真棒。但是你的答案總是非常好而且具有描述性。我在C++問題上看到你的答案,並從中學習新東西。我只是一個初學者。希望有一天能給出和你一樣好的答案:) – Mahesh

1

(radius1 + radius2) - (Current distance between the two centers)是由任一球體移動到完全相互接觸的距離量。 (假設球體目前相交)

+0

假設三維空間,那麼(半徑1 +半徑2) - (兩個中心之間的當前距離)將是物體在xy和z中的所有移動距離? ? – Krishnan

+0

@ Krishnan-不,這是距離的大小。如果你想獲得需要移動球體的矢量,你需要給我們更多的信息,因爲你可以移動球體的方式有很多種,所以它們只能觸及一個點。您可能想要在中心之間的線上獲得單位矢量,然後按照上述距離縮放該矢量。 – templatetypedef

+0

好問題。假設兩個球體中心相交在** X軸**上。現在,任何一個球體的中心移動都可以精確地觸及另一個球體,只會沿着** X軸**而不是沿着所有的3軸。 – Mahesh

2

在位置矢量一個b(即一個定義兩個球與中心=一個 X +一個ýĴ +一個 zk)。

從球體A的中心定義的向量Ç到球B的中心:

Ç = b - 一個

其長度爲| c | = | b - a |
              = SQRT([B X - 一個 X] + [B ý - 一個ÿ] + [B ž - 一個 z] )

正如Mahesh所述,兩個球體之間的距離爲:

| d | = | c | - R的 - R的

所以矢量d從球體A到B的最遠點的最遠點將或者沿Ç指向(當球體尚未相交)或者在相反的方向上(當球體相交時)。

要移動一個球體使其不相交,需要將其移動d。由於這是一起Ç,我們只能乘由因子c得到d的組件:

F =(| d |/| ç |)
d = F * ç

例如,在x方向上:

d X = F * C X

所以,我要說嘗試:

  • 計算位移Ç從A的位置矢量和B.
  • 計算的長度的部件的c從其組件
  • 計算長度爲d c的長度和半徑
  • 計算因數f 和C之間d
  • 計算由因子f縮放的Ç組件d的組件。

您可以通過測試f上的符號來測試球體是否相交:如果它是負的,那麼球體相交。然後,您可以通過d或同時按d的某個部分移動A或B,以使它們不再相交。