快速业务通道

Robocode基本原理之坐标锁定 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
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:

Geny GenyTrack
X:303 genyX:303
Y:128 genyY:128

列表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:

double bearing = (getHeading() + e.getBearing ()) % 360;      double distance = e.getDistance();      bearing = Math.toRadians(bearing);      double genyX = getX() + Math.sin(bearing) *  distance;      double genyY = getY() + Math.cos(bearing) *  distance;      out.println("genyX:"+ Math.round(genyX));      out.println("genyY:"+ Math.round(genyY));

注意三角函数的基础中:对边长=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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号