Robocode基本原理之坐标锁定 - 编程入门网
nd(genyY));
}
}
注意这两个机器人我们都使用了AdvancedRobot的类,这可是高级机器人的说 明了。有关高级机器人大家可以查找Robocode API的说明,也可看看Sing Li的 "Rock ''em, sock ''em Robocode: Round 2". Robocode基本原理之坐标锁定(3)时间:2010-11-29 IBM 天翼.李Skyala.Li距离探测 要得到目标坐标我们首先得知道我们和目标之间的距离。这里的距离探测很 简单,只要运用GenyTrack机器人ScannedRobotEvent事件中的 getDistance()方 法我们就可得到Geny机器人和你之间的距离差了。只是要注意一点,由于机器人 存在着宽和高,可分别用Robocode API 中的getWidth()和getHeigth()方法得到 。而两个机器人的距离是以双方的中心点为终点。如图所示,L才是它们的距离 ,A的距离是错误的。 图2 坐标探测 知道了对方的距离,知道了整个坐标系统。我们就来锁定我们的目标Geny.我 们先来看看图3所示: 图3 Robocode基本原理之坐标锁定(4)时间:2010-11-29 IBM 天翼.李Skyala.Li列表1:
列表1就是我们用”动静机器人”测试法得出的数据。你将会惊喜若狂,不错 ,我们成功的探测到了我们可怜的Geny的坐标。惊喜过后你就会不明白了:我们 是怎样实现这一切的?为什么代码中使用到了非Robocode中的类库Math,还似乎 用到了正余弦求解,还有弧度?不错,这就是Robocode:处处都让我们惊奇,处 处都让我们学习新的知识。如果你对中学时代的数学三角几何解法已经陌生,没 关系,你将在我们本文最后的 三角函数基础中将学习到这些。它将勾起你中学 时代的记忆。 现在让我们来分析分析我们GenyTrack到底做了些什么: 在 GenyTrack的ScanndeRobotEvent事件中我们首先得到Geny的绝对角度 bearing,也即相对屏幕的角度。并从 ScannedRobotEvent扫描事件中得到的大 量信息分析中提炼出Geny和GenyTrack的距离为distance。有了Geny的角度, 有 了Geny的距离我们再根据三角学基础(详见文 三角函数基础)就可求出Geny的 精确坐标了。 又由于Java类库中的正弦函数sin余弦函数cos是以弧度制(详见文 三角函数 基础)为角度的参数。所以我们利用了Math.toRadians方法把Geny的绝对角度转 化为弧度。见列表2 列表2:
注意三角函数的基础中:对边长=sina *斜边长,侧边长=cosa*斜边长,但 要记住Robocode中三角坐标系统中的sin和cos和我们数学中的三角坐标系统有一 定差别,也即上面的 sina和cosa要对换,对边长=cosa*斜边长。图4画出了Geny 和GenyTrack之间角度和距离的关系以及Robocode所采用的三角坐标系统。 图4 黑线条为GenyTrack的X,Y坐标,蓝线条以Geny的距离distance和绝对角度 bear求得的X,Y坐标,两者相加得到的就是Geny的X和Y坐标。 至于Math类库的使用,我们就不详细说明了。读者也可从下面的IBM Java专 区链接中找到很多有关的知识,也可参考一些Java类库书籍说明。当你设计高级 Robocode机器人时你会发现,Math类库是你 |
||||||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |