直线提前量瞄准
2015-09-23 13:23
369 查看
import org.robochina.airobot.tank.*; import org.robochina.math.*; import java.awt.geom.*; import java.util.*; public class FireFirst extends SimpleRobot { private double opponentVelocity;//对手的速度 private double power = 1;//炮弹的能量 private double bulletVelocity;//炮弹的速度 private double headingAB;//连线AB的方向 private double headingAC;//连线AC的方向 private double bearingCAB;//求出<CAB private double sinCAB;//cab的正弦值 private double angleACB;//acb的值 private double headingCB;//CB连线的方向角 /** * 每个单位时间都会触发 */ public void onTick(TickAction action){ //得到对手的信息 Bot opponent = this.getFirstOpponent(); //如果对手不存在就返回 if (opponent == null) { return; } //得到对手的速度 opponentVelocity = opponent.getVelocity(); //求炮弹的速度 bulletVelocity = 20-3*power; //求连线AB的方向角 headingAB = opponent.getHeading(); //求AC连线的方向角 headingAC = MathUtils.heading(opponent.getLocation(),getLocation()); //求角cab bearingCAB = MathUtils.bearing(headingAB,headingAC); //求角cab的正弦值 sinCAB = Math.sin(bearingCAB); //求角acb的值 angleACB = Math.asin(opponentVelocity*sinCAB/bulletVelocity); //cb连线的方向角 headingCB = headingAC+Math.PI-angleACB; fire(headingCB,1); } /** * 当开始一轮新的比赛时触发 */ public void onRoundBegin(RoundBeginAction action){} /** * 当一轮比赛结束时触发 */ public void onRoundFinish(RoundFinishAction action){} /** * 当开始一场新的比赛时触发 */ public void onMatchBegin(MatchBeginAction action){} /** * 当整场比赛结束时触发 */ public void onMatchFinish(MatchFinishAction action){} /** * 当有队友向自己发送消息时触发 */ public void onMessageReceived(MessageReceivedAction action){} /** * 当撞到其它机器人时触发 */ public void onHitRobot(HitRobotAction action){} /** * 当撞到墙时触发 */ public void onHitWall(HitWallAction action){} /** * 当任意一个机器人开火时触发 */ public void onFire(FireAction action){} /** * 当有机器人死亡时触发 */ public void onRobotDeath(RobotDeathAction action){} /** * 当自己的子弹击中敌人时触发 */ public void onBulletHit(BulletHitAction action){} /** * 当被别人的子弹击中时触发 */ public void onHitedByBullet(HitedByBulletAction action){} /** * 机器人程序入口 * @param args */ public static void main(String[] args) { startup(args, new FireFirst()); } }
在这个算法中我们运用的是三角函数的算法来实现,这个也可以用迭代子弹的方法来实现瞄准的算法
比如现在你在C点,敌人在A点,运动事件为t的情况下走到B点。这个时候我们需要朝着bc连线的方向打击敌人。
是不是一个图就搞定了。嗯是的有时候一直在那想不如自己画画,画画就出来了。
相关文章推荐
- Android SurfaceView的总结与理解
- virtualbox安装centos6.5设置共享文件夹
- Eclipse下编写C++程序——CDT环境搭建
- Eclipse黑色主题设置方法
- Hustoj关闭Apache的目录浏览功能
- 推荐2一个在Java编码过程中得心应手的工具
- Notepad++ Emmet安装方法教程
- 将Sublime Text 添加到鼠标右键菜单的教程方法
- qml学习--------------图形的变换
- java输入的几种方式 转
- 初探 iOS8 中的 Size Class
- struct和typedef struct
- [原]打造Python开发环境之初篇
- 书法2
- nginx解析php请求为404
- EditText属性
- BLE应用
- Python的Urllib库详细教程
- 不要问用户想要什么!用户访谈3基本问题,致产品经理
- tomcat解决多个项目冲突