|
// 在游戏循环中 // 移动的物体简化为质点,位置是x=0.0f,y=0.0f // 质点速度向量的分量是Svx=4.0f,Svy=2.0f // 障碍向量是bx=14.0f-6.0f=8.0f,by=4.0f-12.0f=-8.0f // 则障碍向量的垂直向量是Nx=-8.0f,Ny=-8.0f
// 这里可以加入碰撞检测 // 现在假设已经碰撞完毕,开始反弹计算!
// 计算N的长度 float lengthN = sqrt( Nx*Nx + Ny*Ny ) ; // 归一化N为n' float n0x = Nx / lengthN ; // n0x就是n'的x分量 float n0y = Ny / lengthN ; // n0y就是n'的y分量 // 计算n,就是S在N方向上的投影向量 // 根据b'= (-b.a1').a1',有n = (-S.n').n' float nx = -(Svx*n0x+Svy*n0y)*n0x ; // n的x分量 float ny = -(Svx*n0x+Svy*n0y)*n0y ; // n的y分量 // 计算T // T = S + n float Tx = Svx + nx ; // T的x分量 float Ty = Svy + ny ; // T的y分量 // 有了T,有了F = 2*T - S,好了,你现在拥有一切了 // 计算F float Fx = 2*Tx - Svx ; // F的x分量 float Fy = 2*Ty - Svy ; // F的y分量 // 现在已经计算出了反弹后的速度向量了 // 更新速度向量 Svx = Fx ; Svy = Fy ; // 质点移动 x+=Svx ; y+=Svy ; // 现在你就可以看到质点被无情的反弹回去了 // 而且是按照物理法则在理想环境下模拟 |