2010-06-19 80 views
6

有沒有辦法修改Gilbert-Johnson-Keerthi算法,以便找到兩個物體之間的碰撞點而不是真/假結果?從我所瞭解的接收距離值可以用來找到這些點。我搜索了網頁,但沒有找到任何提示。GJK中的碰撞點

+0

一個外行人的想法:如果你從原點到身體做GJK,你不僅可以得到從原點到身體的距離,最接近原點的身體。然而,對於兩個身體來說,你測量的是閔可夫斯基總和A-B。如果屍體發生碰撞,你會得到0本身的結果,但是你需要找到所有的點對(A中的a,b中的B),它們的差值恰好爲0以得到碰撞點集合。所以,我沒有看到GJK結果導致一個簡單的通用解決方案。嘗試直觀地查看http://www.pfirth.co.uk/minkowski.html。 – 2010-06-19 20:42:15

+0

你知道任何其他簡單的解決方案來找到兩個機構之間的生命值嗎?我讀過Gino Van Den Bergen的「適用於連續碰撞檢測的普通凸物體的雷射投影」,但它非常複雜,似乎並不能真正幫助我(我試圖製作一個物理模擬器,並且對於我碰撞後身體能夠正常旋轉)。從我看過的文字看,如果一個身體轉動它並不是那麼容易以這種方式找到生命值。也許我可以實現其他任何算法?如果有幫助,我可以對每一幀進行檢查。 – Viuo 2010-06-19 23:33:18

回答

3

你所要求的是不健康的。如果它們發生碰撞,則交點不確定 - 因爲交點實際上是一個重疊區域,因此可能是任意數量的可能點。相反,你應該考慮一個「交點」作爲時空座標(dx,dy,dz,t),表示碰撞時間,以及兩個物體之間的平移向量,給出它們的相對配置。

修改GJK以計算時空交點的一種方法是在掃描體積上進行二分搜索以找到碰撞前的時刻。使用這些數據,您可以計算兩個物體的分離軸和相應的極值點,從而爲您提供近似的影響點。如果您重複使用之前的搜索迭代中的單形來加速後續測試,這種方法也可以很快。 Christer Ercisson對這種技術有一些注意:http://realtimecollisiondetection.net/pubs/SIGGRAPH04_Ericson_GJK_notes.pdf