我正在編寫擴展Circle-Rectangle collision detection (intersection)以包含對碰撞的響應的軟件。圓形邊和圓形矩形相當直接。但是圈子讓我難倒了。解決圓圈碰撞問題
例如,在離散事件模擬中,讓兩個圓形碰撞,一個紅色和一個綠色。我們可能有以下情況:
它們相撞後,我們立即可以有:
這裏RIP和GIP是圓的,在之前的時鐘滴答的位置。在當前的時鐘週期,衝突在RDP和GDP檢測到。然而,當兩個圓圈位於RCP和GCP時,兩個圓圈之間發生衝突。在時鐘刻度上,紅色圓圈向右移動RVy並向右移動RVx;綠色圓圈向下移動GVy,向左移動GVx。 RVy不等於GVy; RVx也不等於GVx。
相撞當圓中心間的距離小於或等於該圈子半徑之和時,也就是,前面的圖中,d < =(RR + GR)。在發生碰撞時,我們需要在調整圓的速度分量之前將DP定位回CP。在d ==(Rr + Gr)的情況下,由於DP位於CP,因此不需要重新定位。
這就是問題所在:我該如何回到CP?一些作者建議,在下圖中用p給出的滲透的一半被應用。
對我來說,這是完全錯誤的。它假定兩個圓的速度矢量相等,在這個例子中,情況並非如此。我認爲滲透與計算有關,但是如何避開我。我知道這個問題可以改寫爲我們想要爲Gcdy和GCdx解決的類似三角形的問題。
碰撞本身將被模擬成彈性,以及慣性交換數學已經到位。唯一的問題是將圓圈置於碰撞的位置。
你在找什麼樣的碰撞?彈性(不會損失能量)?無彈性(能量損失)?這兩個圈子粘在一起,並繼續移動一對? – John
這個問題似乎是題外話題,因爲它是關於物理而不是編程。 – tom10
@john碰撞將被建模爲彈性。慣性交換的數學已經到位。問題是在哪裏定位圈子。 – Gus