看板 GameDesign 關於我們 聯絡資訊
自問自答..... 想出演算法了 Va (垂直分量) ↑ ↗V1 (原分量) │ ╱ │ ╱ │ ╱ │╱ └────→Vb (平行分量) ────→ V' (質心向量) 依照公式: Vb = |V1| * Cosθ * V'的單位向量 = |V1| * (V1‧V') / (|V1|*|V'|) * V' / |V'| = V1‧V'/V'^2 * V' 就這麼簡單..... Cosθ會照向量的夾角出現正負,所以不用判斷方向, 兩條垂直向量都可以。 只要依照上面方式再求一次垂直方向的分量即可。 故,程式碼簡化為: Va,Vb 計算投影(V1, V') { V'.Normalize(); Vector2 Vb = Vector2.Dot(V1,V') * V'; //單位向量的V'^2 = 1 Vector2 Va = new Vector2(V'.Y,-V'.X); Va *= Vector2.Dot(V1,Va); //Va依然是單位向量, Va^2 = 1 return Va,Vb; } 同時,平面與球的碰撞也解決了。 只要取得平面的法向量,把球的速度做投影,將水平方向給個負號就好。 至於彈性碰撞係數跟質量的影響,都是在投影之後,交換水平向量時處理的。 那都小事.... 太複雜的碰撞就算了,我打算做的遊戲只要這樣就夠用了。 -- 我... 我一點都不糟糕啦!>///< -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.140.109.3 ※ 編輯: F23ko 來自: 220.140.109.3 (08/06 20:43)