Robocode基本原理之坐标锁定 - 编程入门网
_bearing = Math.toRadians(heading % 360); //角度转为弧度
double genyX = getX() + Math.sin(ager_bearing) * distance;
double genyY = getY() + Math.cos(ager_bearing) * distance;
out.println("genyX:"+ Math.round(genyX));
out.println("genyY:"+ Math.round(genyY));
if( heading >= 360 )
heading = heading - 360;
if( heading < 0 )
heading = heading +360;
double bearing = getRadarHeading() - heading;
double radar_degree;
boolean radar_direction;
if( 0 <= bearing && bearing <= 180 )
{
radar_direction = LEFT;
}
else if( bearing <= -180 )
{
radar_direction = LEFT;
bearing = ( 360 + bearing );
}
else if( bearing < 0 )
{
radar_direction = RIGHT;
bearing =( -bearing );
}
else
{
radar_direction = RIGHT;
bearing = (360 - bearing);
}
radar_degree = bearing * 1.3 ; //加大每一时间周期 (tick)的扫描范围
if( radar_direction == RIGHT )
{
setTurnRadarRight( radar_degree );
execute();
}
else
{
setTurnRadarLeft( radar_degree );
execute();
}
我们在代码中首先求得GenyMove的绝对角度,然后用扫描时雷达的绝对角度 减去目标GenyMove的角度求得两者的角度差也即我们雷达要旋转的角度。最后利 用一个小技巧radar_degree = bearing * 1.3 使雷达在目标的范围左右摆动以 扩大雷达扫描区域.这样不管目标往哪边移动都在自己的雷达扫描区内。 在此没有进行很详细的讲解了,我想凭你学到的方向及坐标知识很快能明白 个中原理并设计出自己的高级扫描机器人来。聪明的你可能会高兴的想,哈,我 的炮管用相同的办法锁定目标,这样敌人不就没办法跑了,被我追着打。答案是 错误的,雷达的扫描是条长线能直接定位到目标上,它到目标的时间差几乎为零 ,并且雷达的扫描范围比炮管大且精确。而炮管每时间周期只有20度,它定位目 标是依靠着子弹,只有子弹打中了目标,才能说炮管的计算坐标是精确的。但是 由于子弹到达目标位置时需要一定的时间差,子弹本身又有速度值(20-3*power ),所以要想炮管锁定目标并让子弹击中目标,我们还得经过精确的计算,并要 预测目标可能的行动:是直线前进,还是做圆周运动,还是随机运动等等。这些 都是我们要充分考虑的因素。是不是很有挑战性!这一切都在Robocode的世界中 等待着您的创造! Robocode基本原理之坐标锁定(7)时间:2010-11-29 IBM 天翼.李Skyala.Li三角函数基础 下面我们只是很简单的介绍了一下与Robocode相关的三角函数知识,要想了 解详细的,大家可从家中高中代数与几何书中得到这一切。 1.角的概念 在平面内,角可以看作一条射线绕着它的端点旋转而成的图形。如图,一条 射线由原来的位置OA,绕着它的端点O按逆时方向旋转到另一位置OB,就形成角 a.旋转开始时的射线OA叫做角a的始边,旋转终止时的射线OB叫做角a的终边,射 线的端点O叫做角a的顶点。习惯上,我们把按逆时针方向旋转而成的角叫做正角 ;按顺时 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |