作者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)