有沒有辦法找出2個球體之間的交集距離?我明白當兩個球體相交形成圓形時。但是,我想要突破的是我需要將圈子1推到外面,這樣他們纔不會相交,並且處於他們只是互相接觸的地步。我擁有的唯一數據是球體的中心和它們各自的半徑。球體 - 球體交集:距離向量
感謝
有沒有辦法找出2個球體之間的交集距離?我明白當兩個球體相交形成圓形時。但是,我想要突破的是我需要將圈子1推到外面,這樣他們纔不會相交,並且處於他們只是互相接觸的地步。我擁有的唯一數據是球體的中心和它們各自的半徑。球體 - 球體交集:距離向量
感謝
如果您知道這兩個領域重疊,那麼你可以計算其中心之間的距離。然後,您可以將兩個球體的半徑相加,以獲得球體必須彼此之間的最小距離,以便它們僅接觸一個點。兩者之差(半徑之和減去中心之間的距離)應該是球體需要彼此分開以使它們僅接觸一點的量。
@ templatetypedef-這只是一個巧合,出答案是相同的:) – Mahesh
@ Mahesh-不是數學真棒?兩個從未見過面的人可以在相同的問題上工作,並在幾秒鐘內得到相同的答案。 :-) – templatetypedef
是的,數學是真棒。但是你的答案總是非常好而且具有描述性。我在C++問題上看到你的答案,並從中學習新東西。我只是一個初學者。希望有一天能給出和你一樣好的答案:) – Mahesh
(radius1 + radius2) - (Current distance between the two centers)
是由任一球體移動到完全相互接觸的距離量。 (假設球體目前相交)
假設三維空間,那麼(半徑1 +半徑2) - (兩個中心之間的當前距離)將是物體在xy和z中的所有移動距離? ? – Krishnan
@ Krishnan-不,這是距離的大小。如果你想獲得需要移動球體的矢量,你需要給我們更多的信息,因爲你可以移動球體的方式有很多種,所以它們只能觸及一個點。您可能想要在中心之間的線上獲得單位矢量,然後按照上述距離縮放該矢量。 – templatetypedef
好問題。假設兩個球體中心相交在** X軸**上。現在,任何一個球體的中心移動都可以精確地觸及另一個球體,只會沿着** X軸**而不是沿着所有的3軸。 – Mahesh
在位置矢量一個和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
所以,我要說嘗試:
您可以通過測試f上的符號來測試球體是否相交:如果它是負的,那麼球體相交。然後,您可以通過d或同時按d的某個部分移動A或B,以使它們不再相交。
嘗試http://math.stackexchange.com –