知识大全 圆周瞄准
Posted 机器人
篇首语:知识的领域是无限的,我们的学习也是无限期的。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 圆周瞄准相关的知识,希望对你有一定的参考价值。
Robocode 高手的秘诀:圆周瞄准 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
在您精通了直线瞄准之后 下一步就是圆周瞄准 该系统用到的数学略高深一些 以使您能极为准确的命中做圆周运动的机器人 同时仍能保留对付直线运动的机器人的有效性 Alisdair Owens 将向您展示如何实现这一技巧 并提供示例机器人 您可以把它拿出来试玩一次 这篇小技巧会让您深入理解圆周瞄准的工作原理 我们会从讨论基本技巧的工作原理开始 接着阐释一个简单的迭代 它能显著提高准确性 我还提供源代码 它很容易适应在您自己的机器人中工作 工作原理 计算做圆周运动的机器人的 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 为圆周半径运动 计算必要的数据 图 说明了我们需要的大部分数据 r 是机器人运动所绕的圆周半径 方向变化为 a 而 v 则是敌方机器人运动的即时速度 图 沿圆周移动 > 为了要准确瞄准敌人 我们需要某些特定的数据 机器人当前的方向 每转的方向变化 当前的速度 我们的子弹到达的时刻 我们可以使用这些数据计算出敌人转圈的圆半径 以及它最后的方向(即 我们的子弹到达敌人的瞬间敌人的方向) 我们计算子弹击中位置的方法如下 每转的方向变化 我们用 headingchangeperturn = (heading heading )/time 得到这个值 其中 time 是两次测量的间隔时间 您还必须使结果标准化 如下面代码中所示 子弹时间 我们使用简单的 time = getTime()+(range/( ( *firepower))) 就可以满足需要了 其中 range 是发射时我们和敌人之间的距离 而 firepower 是我们计划使用的射击火力 假定子弹击中时 目标到我方的距离不变 这个假设并不合适 但是我们在本文后面的内容中开发出迭代之前 有它就足够了 半径 我们用 radius = velocity/headingchangeperturn 得出这个值 代码 圆周路径预测只需要清单 但是 请注意如果目标的方向变化很小 那么就要使用直线瞄准 由于一旦半径过大将导致存储它所用的 double 溢出 因而我们使用这种方式来缓解这一风险 不过条件是方向变化比较小 我们也就不必太担心了 清单 圆周瞄准代码 public Point D Double guessPosition(long when) /**time is when our scan data was produced when is the time that we think the bullet will reach the target diff is the difference beeen the o **/ double diff = when time; double newX newY; /**if there is a significant change in heading use circular path prediction**/ if (Math abs(changehead) > ) double radius = speed/changehead; double tothead = diff * changehead; newY = y + (Math sin(heading + tothead) * radius) (Math sin(heading) * radius); newX = x + (s(heading) * radius) (s(heading + tothead) * radius); /**if the change in heading is insignificant use linear path prediction**/ else newY = y + s(heading) * speed * diff; newX = x + Math sin(heading) * speed * diff; return new Point D Double(newX newY); 改进结果 如果您已经试过清单 中的代码 那么您会发现对付 spinbot(沿圆周移动的样本机器人)的情况明显好多了 但您很可能还会注意到 机器人发出的炮弹中仍有不少没有命中目标 这不单单是因为瞄的不准 还要归因于您对子弹要花费多长时间才能到达目标的估算不准 要提高您的技术 可以通过使用一个非常简单的迭代来估算一下时间 然后把这个估算值送入瞄准系统得到当子弹到达目标时您与目标之间的距离的更精确的估算值 反复执行几次这一步 您将得到近乎完美的估值 清单 迭代代码 /**This function predicts the time of the intersection beeen the bullet and the target based on a simple iteration It then moves the gun to the correct angle to fire on the target **/ void doGun() long time; long nextTime; Point D Double p; p = new Point D Double(target x target y); for (int i = ; i < ; i++) nextTime = (intMath round((getRange(getX() getY() p x p y)/( ( *firePower)))); time = getTime() + nextTime; p = target guessPosition(time); /**Turn the gun to the correct angle**/ double gunOffset = getGunHeadingRadians() (Math PI/ Math atan (p y getY() p x getX())); setTurnGunLeftRadians(normaliseBearing(gunOffset)); double normaliseBearing(double ang) if (ang > Math PI) ang = *PI; if (ang < Math PI) ang += *Math PI; return ang; public double getrange(double x double y double x double y ) double x = x x ; double y = y y ; double h = Math sqrt( x*x + y*y ); return h; 改进圆周瞄准的性能 作为瞄准系统 圆周瞄准基本成形了 也就是说 既在我们能力所及范围内又能在此基础上更进一步的事并不多 但是 能改善性能的小改动有两处 平均速度 您也许愿意保持一个补偿加速效应的移动平平均速度 而不是根据目标的最后速度进行计算 每一回合方向的平均变化 测量在每一回合内目标方向变化绝对量的平均值有助于我们对付那些不如 spinbot 有规律的目标 cha138/Article/program/Java/JSP/201311/19724相关参考
1对于有阳台和凹廊的建筑物,泛光灯与房屋应有一定距离,以免产生过深的影子。 2泛光灯的安装必须隐蔽并置于一般不易接触到的地方. 3泛光灯的定位与其配光特性(光束宽度、光束形状、光强)是彼此相关的,
1对于有阳台和凹廊的建筑物,泛光灯与房屋应有一定距离,以免产生过深的影子。 2泛光灯的安装必须隐蔽并置于一般不易接触到的地方. 3泛光灯的定位与其配光特性(光束宽度、光束形状、光强)是彼此相关的,
1.对于有阳台和凹廊的建筑物,泛光灯与房屋应有一定距离,以免产生过深的影子。 2.泛光灯的安装必须隐蔽并置于一般不易接触到的地方。 3.泛光灯的定位与其配光特性(光束宽度、光束形状、光强)是彼此相
1.对于有阳台和凹廊的建筑物,泛光灯与房屋应有一定距离,以免产生过深的影子。 2.泛光灯的安装必须隐蔽并置于一般不易接触到的地方。 3.泛光灯的定位与其配光特性(光束宽度、光束形状、光强)是彼此相
炉缸工作良好,不仅要求煤气流径向分布合理,也要求圆周气流分布均匀。长时间圆周工作不均匀会出现炉型部分侵蚀,破坏正常的工作剖面。影响圆周工作不均匀的原因主要是风口进风不匀,如首钢3号高炉1970~1
炉缸工作良好,不仅要求煤气流径向分布合理,也要求圆周气流分布均匀。长时间圆周工作不均匀会出现炉型部分侵蚀,破坏正常的工作剖面。影响圆周工作不均匀的原因主要是风口进风不匀,如首钢3号高炉1970~1
用Delphi编写圆周率模拟器 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!圆周率π是个古老的东西
用Delphi编写圆周率模拟器[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 圆周率π是个
Oracle中实现圆周率计算(一) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!今天两个同事用JA
羊年的仙桃、潜江、天门在描绘新蓝图.仙桃着力打造武汉城市圈西翼中心城市;潜江瞄准“百强”谋跨越;天门向建设繁荣富裕新城市
羊年的仙桃、潜江、天门在描绘新蓝图.仙桃着力打造武汉城市圈西翼中心城市;潜江瞄准“百强”谋跨越;天门向建设繁荣富裕新城市迈进.关于仙桃、潜江、天门地理特征的描述正确的是_____A、位于我国北方地区B