C++多小球非对心弹性碰撞(HGE引擎)(二)

2014-11-24 12:32:36 · 作者: · 浏览: 1
s = ((m2-m1)*v2s + 2*m1*v1s )/ (m1+m2);
v1s = temp_v1s;
//首先求出v1t和v2t在t轴的向量v1t'和v2t'(将数值变为向量)
//再求出v1s'和v2s'在s轴的向量v1s'和v2s'(将数值变为向量)
hgeVector v1tVector = t*v1t;
hgeVector v1sVector = s*v1s;
hgeVector v2tVector = t*v2t;
hgeVector v2sVector = s*v2s;
//新速度矢量
hgeVector v1_new = v1tVector+v1sVector;
hgeVector v2_new = v2tVector+v2sVector;
//划分成x,y方向分量速度
this->speed_x = v1_new.x;
this->speed_y = v1_new.y;
ball->speed_x = v2_new.x;
ball->speed_y = v2_new.y;
}
(5)交换颜色,发生碰撞后的两个小球进行颜色交换,纯属娱乐。
void CBall::SwapColor(CBall *ball)
(6)小球移动,参数 _width,_height分别是窗口的宽高,因为这个方法内包含边界碰撞的检测和反弹。
void CBall::MoveNext(float dt,float _width,float _height)
{
float moveX = speed_x*dt;
float moveY = speed_y*dt;
//x方向边界
if (x+moveX_width-radius)
speed_x = -speed_x;
//Y方向边界
if(y+moveY_height-radius)
speed_y = -speed_y;
x+=speed_x*dt;
y+=speed_y*dt;
}