我想做一些二維剛體(多邊形)物理,我找到了一個精心設計的方程來計算碰撞響應。但是,在此之前,我需要一種很好的方式來找到對這個響應程序的「輸入」。二維多邊形物理碰撞測試
我認爲這樣的輸入應該是碰撞點的座標,並且在此時與碰撞邊緣 垂直。碰撞檢測有很多算法。例如,我可以測試多邊形A的某個頂點是否在多邊形B的內部,但它不會給我一個正常的邊緣。然後,我可能會測試循環中的交點 - 但這是最簡單的方法還是更簡單?
我想做一些二維剛體(多邊形)物理,我找到了一個精心設計的方程來計算碰撞響應。但是,在此之前,我需要一種很好的方式來找到對這個響應程序的「輸入」。二維多邊形物理碰撞測試
我認爲這樣的輸入應該是碰撞點的座標,並且在此時與碰撞邊緣 垂直。碰撞檢測有很多算法。例如,我可以測試多邊形A的某個頂點是否在多邊形B的內部,但它不會給我一個正常的邊緣。然後,我可能會測試循環中的交點 - 但這是最簡單的方法還是更簡單?
Normal to the edge
取決於polygon only
。這不是碰撞數據。
根據程序中如何定義多邊形,您可以從中獲取法線。
假設它由頂點數組定義。
邊緣採用連續的二點,女巫,畫出直線(邊) 邊緣的載體是這樣的:
EdgeVectorX = SecondPointX - FirstPointX
EdgeVectorY = SecondPointY - FirstPointY
正常縮放的矢量到這一點,你得到改變用於Y的X,使他們中的一個負:
NormalX = -EdgeVectorY
NormalY = EdgeVectorX
使之成爲1個lenght向量,由向量的長度除以兩個NormalX和NormalY:
Length = SquareRoot(NormalX*NormalX + NormalY*NormalY)
關於檢查頂點是否在某個多邊形內,請務必測試其中是否還有其他頂點。 在多於一個點的情況下,您必須插入實際位置與以前的位置以找到單個頂點碰撞的確切時刻。 (只有例外是邊緣到邊緣平行碰撞的幸運情況)。你使用的時間步長越大,錯誤就越大。
這個荒謬的錯誤是當時間步長足夠大以使多邊形彼此穿過而沒有檢測到碰撞時。
它是colision數據becouse的邊緣是一個colision數據,;-) – 2013-05-05 15:46:40
...無論如何,這是如何從第一點和第二點給出的邊緣獲得法線向量。 – 2013-05-05 17:57:00