XNA 两球碰撞的运动规律

       这个学期学XNA,老师给布置一个小的2D游戏。所以就选择了气垫球(Air Hockey)的游戏,并且是可以相互对战的。这里想讨论的是一个求固定不动的,另一个在运动的

        然后这个游戏逻辑的关键就是:碰撞,碰撞以后小球的运动路径(速度)。(暂时先没考虑到摩擦)

        碰撞:这里要讲得就是像素检测碰撞,并不是图像或者说是Rectangle的碰撞,用像素检测实现的碰撞更为真实,这里我用到的方法是判断2图交集的alpha值是不是等于0.如果是则碰撞,反之,则无碰撞。参考blog:http://www.dotblogs.com.tw/sonic10690/archive/2008/12/29/6564.aspx


       碰撞以后的速度:画的比较栏,请谅解)。大的圆是不动的,小圆撞击,v1是小圆初始速度,v2是撞击后速度,中间那条是俩圆中心点连接(后面也称之法向量f)。v1是已知的,f也可以求出(碰撞时两者中心相连),现在就要求v2。

       具体步骤:

       向量V1(x1,y1),一个法向量F1(x2,y2)
 
 
 
       V1和V2 关于F1对称,则两个向量的模相等,且向量终点连线垂直于法向量,
  设向量V2=V2(x1',y1')故有:
  ||V1=|V2|          ==>  x1² + y1² = x1'² +y1'²
  (V1-V2)*F1 =0 ==> (x1-x1')*x2 + (y1-y1')*y2 = 0
   两式联立解得:
(1)
 x1'=[2y1*x2*y2 + x1*(x2²-y2²)]/(x2²+y2²)
  y1'=[2x1*x2*y2 - y1*(x2²-y2²)]/(x2²+y2²)
或者 
(2)  x1=x1';y1=y1';
 当V1 与法向量不共线时,显然不符合题意;舍去
 当V1 与法向量共线时,V1=λ*F1,易得V2=λ*V2, (1)中表达式包含该结果。

因此V1(x1,y1) 关于F1(x2,y2)的对称向量为
    V2(  [2y1*x2*y2 + x1*(x2²-y2²)]/(x2²+y2²),[2x1*x2*y2 - y1*(x2²-y2²)]/(x2²+y2²)  ) 

将程式带入XNA代码中,发现游戏的状况是符合逻辑的。


PS:感叹一下,数学没学好,花了大半天时间自己在研究。后来百度提了个问,感谢laoye20011

http://zhidao.baidu.com/question/350552407.html



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值