作者F23ko (純潔)
看板GameDesign
標題Re: [請益] 數學好難 (二維彈性碰撞)
時間Fri Aug 6 20:40:37 2010
自問自答.....
想出演算法了
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)