快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23

Robocode基本原理之坐标锁定

时间:2010-11-29 IBM 天翼.李Skyala.Li

导论

前面我们了解了Robocode中的绝对方向,相对方向及整个方向系统。相信大 家对此深有体会了。但是问题又来了,单知道方向似乎不能完全达到了解敌人的 目的。怎样去探测敌人的距离?怎样精确的锁定目标呢?对于移动中的目标我们 又如何处理?在这里我们将利用Java.lang 基本类库中的Math类及一些基本三角 函数方法为你揭开这些迷雾。对于那些快被遗忘的三角几何知识在本文的最后 Skyala.Li有比较详细的讲解。

坐标基本概念

首先我们还是来看看Robocode API中的一段文字翻译。

All coordinates are expressed as (x,y).

所有的坐标都用x,y来表示

All coordinates are positive.

所有的坐标都为正

The origin (0,0) is at the bottom left of the screen.

坐标原点(0,0)在屏幕的左下角

Positive x is right. X的右边为正

Positive y is up. Y的上面为正

图1显示了Robocode中的坐标系统,有关图的详细说明请看我们前面介绍的文 章 “Robocode基本原理之方向剖析”.

图1

Robocode基本原理之坐标锁定(2)

时间:2010-11-29 IBM 天翼.李Skyala.Li

“动静机器人”测试法

好了,我们知道了Robocode整个坐标系统,一切问题都好办了。先让我们进 行一些有趣的实验。我们仍以”动静机器人”的方法进行测试。这是个测试机器 人方向,坐标参数的很好办法。见下说明:

设计两个机器人,任意取名为Geny和GenyTrack。Geny是个静止的机器人,它 主要任务是打印自己的当前坐标,用来验证GenyTrack追踪它的位置是否正确。 GenyTrack顾名思义,它就是我们要研究的追踪目标机器人了。它在此负责锁定 Geny的坐标,距离并打印出探测到的Geny机器人的X,Y坐标及距离,此处使用了 Java.lang类库中的Math.round方法,四舍五入得到的double类型的数据,方便对 比。最后用表格对比,以此来验证我们使用方法的正确性。

当然还有很多有趣的测试方法来等待着你的验证。如测速度,加速度时我们 就可用”龟兔赛跑”的方法;测炮管,雷达坦克车旋转相互影响度可用”离心重 力”的方法。相信从测试方法的名字聪明的你们就知道他的用法了。

在我们开始前,Skyala.Li建议你们下载源码( resource)先看看GenyTrack的 表演。当然你也可参考文章内附加的辅助说明Robocode坐标系统的代码。

Geny: package test; import robocode.*; public class Geny extends AdvancedRobot {    public void run ()    {      while (true)      {        // round 对get到的数据进行四舍五入处理        out.println("x:"+Math.round(getX()));        out.println("y:"+Math.round(getY()));      }    } }

GenyTrack:

package test; import robocode.*; public class GenyTrack extends AdvancedRobot {    public void run ()    {      while (true)      {        turnRadarRight(400);      }    }    public void onScannedRobot(ScannedRobotEvent e)    {      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.rou

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号