J2ME中的基础碰撞检测算法计算机等级考试

文章作者 100test 发表时间 2009:07:12 21:03:45
来源 100Test.Com百考试题网


  编辑特别推荐:

  全国计算机等级考试(等考)指定教材

  全国计算机等级考试学习视频

  全国计算机等级考试网上辅导招生

  全国计算机等级考试时间及科目预告

  百考试题教育全国计算机等级考试在线测试平台

  全国计算机等级考试资料下载

  全国计算机等级考试论坛

  在游戏中,经常需要进行碰撞检测的实现,例如判断前面是否有障碍以及判断子弹是否击中飞机,都是检测两个物体是否发生碰撞,然后根据检测的结果做出不同的处理。
  进行碰撞检测的物体可能有些的形状和复杂,这些需要进行组合碰撞检测,就是将复杂的物体处理成一个一个的基本形状的组合,然后分别进行不同的检测。
  下面简单介绍一下两种最基本的形状进行碰撞的时候进行的处理。
  1、矩形和矩形进行碰撞
  一般规则的物体碰撞都可以处理成矩形碰撞,实现的原理就是检测两个矩形是否重叠。我们假设矩形1的参数是:左上角的坐标是(x1,y1),宽度是w1,高度是h1.矩形2的参数是:左上角的坐标是(x2,y2),宽度是w2,高度是h2。
  在检测时,数学上可以处理成比较中心点的坐标在x和y方向上的距离和宽度的关系。即两个矩形中心点在x方向的距离的绝对值小于等于矩形宽度和的二分之一,同时y方向的距离的绝对值小于等于矩形高度和的二分之一。下面是数学表达式:
  x方向:| (x1 w1 / 2) – (x2 w2/2) | <. |(w1 w2) / 2|
  y方向:| (y1 h1 / 2) – (y2 h2/2) | <. |(h1 h2) / 2|
  在程序中,只需要将上面的条件转换成代码就可以实现了。
  但是矩形碰撞只是一种比较粗糙的碰撞检测方法,因为很多实际的物体可能不是一个规则的矩形。
  下面介绍一下圆形碰撞。
  2、圆形和圆形的碰撞
  圆形和圆形的碰撞应该说是一种最简单的碰撞,因为在数学上对于两个圆形是否发生重叠,有计算两个圆心之间的距离的公式。那么条件就变为:计算两个圆心之间的距离是否小于两个圆的半径和。
  假设圆形1的左上角坐标是(x1,y1),半径是r1,圆形2的左上角的坐标是(x2,y2),半径是r2。
  因为MIDP1.0中没有浮点数,而且浮点数的运算比较慢,所以我们将条件做一个简单的变换:对于条件的两边都进行平方,这样就去掉了开方的运算步骤。
  下面是数学表达式:
  (x1 – x2)2 (y1 – y2)2 <. (r1 r2)2
  在程序中,只需要将上面的条件转换成代码就可以了。
  上面介绍的只是最基本的碰撞检测算法的实现,而实际的编程过程中遇到的碰撞检测问题要比这些复杂很多,还需要其他形式的检测,还需要进行更加深入的学习。

相关文章


在rich:inplaceSelect中使用布尔型的0selectItem时碰到的问题计算机等级考试
Finereport制作详细过程计算机等级考试
利用数字签名超越JavaApplet的安全限制计算机等级考试
JavaME无线消息API计算机等级考试
J2ME中的基础碰撞检测算法计算机等级考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛