Robocode高手的诀窍 - 圆周对准[Java编程]
本文“Robocode高手的诀窍 - 圆周对准[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
这篇小本领会让您深化理解圆周对准的工作原理.我们会从谈论基本本领的工作原理开始,接着阐释一个简单的迭代,它能明显提高精确性.我还供应 源 代码,它很简单适应在您自己的机械人中工作.
工作原理
计算做圆周运动的机械人的 change in x(x 方向上的改变)和 change in y(y 方向上的改变)的伪码相当简单,假定您以弧度为单位举行计算:
change in x = cos(initialheading) * radius - cos(initialheading + changeinheading) * radius
change in y = sin(initialheading + changeinheading) * radius - sin (initialheading) * radius
式中 initialheading是敌方机械人在初始位置的方向,子弹飞翔期间的方向 改变成 changeinheading,我们假定它以 radius为圆周半径运动.
计算必要的数据
图 1 阐明了我们需求的大部份数据: r是机械人运动所绕的圆周半径,方向 改变成 a,而 v则是敌方机械人运动的当即速度.
图 1. 沿圆周移动
为了要精确对准仇人,我们需求某些特定的数据:机械人当前的方向,每转 的方向改变,当前的速度,我们的子弹到达的时刻.我们可以利用这些数据计算 出仇人转圈的圆半径,以及它最后的方向(即,我们的子弹到达仇人的刹时仇人 的方向).我们计算子弹击中位置的办法以下:
每转的方向改变:我们用 headingchangeperturn = (heading2 - heading1)/time 得到这个值,此中 time是两次丈量的隔断时间.您还必须使结 果尺度化,以下面代码中所示.
子弹时间:我们利用简单的 time = getTime()+(range/(20- (3*firepower))) 便可以满意需求了.此中 range是发射时我们和仇人之间的距 离,而 firepower是我们筹划利用的射击火力.假定子弹击中时,目标到我方的 距离不变,这个假定并不符合,但是我们在本文背面的内容中开辟出迭代之前, 有它就充足了.
半径:我们用 radius = velocity/headingchangeperturn 得出这个值.
以上是“Robocode高手的诀窍 - 圆周对准[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |