Robocode基本原理之坐标锁定 - 编程入门网
不可缺少的一部分知识。此处我们只 简单的介绍正弦函数及余弦函数的使用。
Sin函数返回三角的正弦函数,参数a是一个以double类型以弧度表示的角度 值,返回类型为double.
Robocode基本原理之坐标锁定(5)时间:2010-11-29 IBM 天翼.李Skyala.LiCos函数返回三角的余弦函数,参数a是一个以double类型的弧度表示的角值, 返回类型为double. 有人会问为什么不使用ScanndeRobot事件中的getRadarHeadingRadians()方 法直接得到弧度。哦,你来看看 Robocode中华联盟iiley的一段说明:
看起来好像正确的,但是你实践一下会发现他很不准确,为什么呢?原因在 于getRadarHeadingRadians()函数,当你调用此函数的时候实际上雷达已经不在 刚刚扫描到敌人的那个角度了,他已经转过了十几度甚至更多。雷达默认转动速 度是45度/robocode单位时间,实际上一般来说你用getRadarHeadingRadians() 得到的值总是45度的整数倍。(一些情况除外,比如说你用了turnRadarLeft (11)类似的语句以后)。 Robocode 也遵循数学应用中的基本法则用两种方法来表示方向的角度:角度 制和弧度制,本文的代码及以前文章中的代码我们一直用的是角度制。另外一种 方法就是利用 ScannedRobotEvent.getBearingRadians() +robot.getHeadingRadians()得到敌人以弧度表示的方向,这个方法在本文章中 没有说明了,有兴趣的朋友可以自己试试用Java.util 类库来实现. 也可参考文 档 "精确计算敌人的坐标"。大家也可比较两种方法各自特点,这将是个很有意 思的过程。 移动锁定 当然,即使是最简单的机器人也不会坐在那一动不动等着你来消灭。它会躲 避你的进攻以及扫描,当你向它原来坐标处开火,说不定它已经跑得老远了,当 然这一切都不是我们所希望看到的。我们的目的是要消灭它:不管他是移动或静 止的。下面我们就结合方向系统与坐标系统,来锁定我们移动的目标。创造一个 我们自己的高级扫描机器人。建议你在此处下载源代码( resource)并看看演示 效果再回到我们的文章中来。显示如图5: 图5 Robocode基本原理之坐标锁定(6)时间:2010-11-29 IBM 天翼.李Skyala.Li对比一下上面的数据,不管目标GenyMove在哪GenyRadar都能得到它精确的坐 标。是不是有一种成就感!是的,敌人已经完全在我们的掌握之中。即使它在移 动中也无法摆脱我们雷达的扫描控制。这里只是很简单举了一些例子,GenyMove 在每一个时间周期(有关时间周期的说明见的 Rock ''em, sock ''em Robocode: Round2)移动自己的位置并打印出移动后的坐标,而GenyRadar扫描系统不停的 扫描目标,并一直追踪,同时打印出扫描到的GenyMove方位。关键部分在我们的 ScannedRobotEvent事件如列表3 列表3:
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |