亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Java新學法之Robocode基本原理之坐標鎖定(上)

2019-11-18 13:08:54
字體:
來源:轉載
供稿:網友

  導論
  前面我們了解了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基本原理之方向剖析”.
  
 Java新學法之Robocode基本原理之坐標鎖定(上)(圖一)

  
圖1

  
  “動靜機器人”測試法
  
  好了,我們知道了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.round(genyY));
  
  }
  
  }
  
  注重這兩個機器人我們都使用了AdvancedRobot的類,這可是高級機器人的說明了。有關高級機器人大家可以查找Robocode API的說明,也可看看Sing Li的"Rock 'em, sock 'em Robocode: Round 2".
  
  距離探測
  
  要得到目標坐標我們首先得知道我們和目標之間的距離。這里的距離探測很簡單,只要運用GenyTrack機器人ScannedRobotEvent事件中的getDistance()方法我們就可得到Geny機器人和你之間的距離差了。只是要注重一點,由于機器人存在著寬和高,可分別用Robocode API 中的getWidth()和getHeigth()方法得到。而兩個機器人的距離是以雙方的中心點為終點。如圖所示,L才是它們的距離,A的距離是錯誤的。
  
 Java新學法之Robocode基本原理之坐標鎖定(上)(圖二)

  
圖2

  
  坐標探測
  
  知道了對方的距離,知道了整個坐標系統。我們就來鎖定我們的目標Geny.我們先來看看圖3所示:
  
 Java新學法之Robocode基本原理之坐標鎖定(上)(圖三)

  
 Java新學法之Robocode基本原理之坐標鎖定(上)(圖四)

  
圖3

  
  列表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所采用的三角坐標系統。
  
Java新學法之Robocode基本原理之坐標鎖定(上)(圖五)

  
圖4

  
  黑線條為GenyTrack的X,Y坐標,藍線條以Geny的距離distance和絕對角度bear求得的X,Y坐標,兩者相加得到的就是Geny的X和Y坐標。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩中文字幕第一页| 精品国产欧美成人夜夜嗨| 国产a∨精品一区二区三区不卡| 欧美精品免费在线观看| 国产亚洲a∨片在线观看| 欧美韩日一区二区| 欧美视频国产精品| 日韩成人在线视频| 高清在线视频日韩欧美| 日韩女优在线播放| 国产精品美乳在线观看| 91chinesevideo永久地址| 九色精品美女在线| 亚洲精品一区二区在线| 欧美激情视频在线观看| 精品福利樱桃av导航| 亚洲女同精品视频| 色婷婷av一区二区三区在线观看| 中文日韩在线视频| 国产香蕉精品视频一区二区三区| 操人视频在线观看欧美| 色噜噜狠狠狠综合曰曰曰| 亚洲精品免费网站| 日韩av免费在线| 国产精品爽黄69天堂a| 亚洲影影院av| 国产精品一区二区三区成人| 91色在线视频| 欧美在线性爱视频| 色妞在线综合亚洲欧美| 一本色道久久综合狠狠躁篇的优点| 夜夜嗨av一区二区三区四区| 奇米成人av国产一区二区三区| 亚洲视频电影图片偷拍一区| 久久av中文字幕| 国外成人在线直播| 成人福利在线视频| 国产在线视频2019最新视频| 欧美激情高清视频| 久久国内精品一国内精品| 日韩中文在线中文网在线观看| 亚洲国产精品va在线看黑人| 精品国产区一区二区三区在线观看| 欧美在线观看一区二区三区| 欧美成人精品一区二区三区| 色噜噜狠狠色综合网图区| 92裸体在线视频网站| 国产区精品视频| 国产精品久久久久久久久久久久| 国产精品久久久久久久久久三级| 国产精品高潮呻吟视频| 日韩精品www| 不卡中文字幕av| 国产亚洲精品久久| 国产精品成人aaaaa网站| 亚洲国产欧美日韩精品| 色综合久久中文字幕综合网小说| 欧美资源在线观看| 北条麻妃99精品青青久久| 欧美极品少妇xxxxⅹ喷水| 欧美做受高潮电影o| 久久九九有精品国产23| 亚洲乱码国产乱码精品精天堂| 在线电影av不卡网址| 亚洲精品一区中文| 俺也去精品视频在线观看| 久久久久亚洲精品成人网小说| 国产精品成人观看视频国产奇米| 欧美国产日韩中文字幕在线| 不卡av电影在线观看| 亚洲毛片在线免费观看| 日韩高清人体午夜| 日韩一级黄色av| 亚洲精品mp4| 国产精品视频久| 国产98色在线| 亚洲天堂成人在线| 狠狠做深爱婷婷久久综合一区| 一区二区欧美激情| 亚洲成人精品久久| 欧美日韩亚洲视频| 这里只有精品在线播放| 欧美国产日韩中文字幕在线| 日韩电影在线观看中文字幕| 亚洲国产精品一区二区三区| 九九九热精品免费视频观看网站| 日本欧美在线视频| 欧美丰满少妇xxxxx做受| 国产乱人伦真实精品视频| 日韩人体视频一二区| 成人两性免费视频| 亚洲色图第一页| 亚洲男人第一网站| 91在线视频导航| 亚洲国产精品一区二区久| 97av在线影院| 黑人巨大精品欧美一区二区免费| 久久精品亚洲一区| 91高清视频免费| 国产成人精品最新| 亚洲国产成人爱av在线播放| 日韩精品www| 国产一区二区美女视频| 国产欧美欧洲在线观看| 神马久久久久久| 国产精品精品一区二区三区午夜版| 亚洲视频精品在线| 欧美老女人在线视频| 国产精品av在线播放| 久久99热精品| 午夜精品国产精品大乳美女| 久久躁狠狠躁夜夜爽| 久久91超碰青草是什么| 国外成人在线直播| 欧美性xxxxx极品娇小| 91性高湖久久久久久久久_久久99| 91精品国产沙发| 91大神福利视频在线| 97人人模人人爽人人喊中文字| 九色成人免费视频| 国产一区二区三区日韩欧美| 亚洲白拍色综合图区| 国产精品视频久| 2018国产精品视频| 九九热在线精品视频| 韩国19禁主播vip福利视频| 久久视频中文字幕| 国产精品草莓在线免费观看| 欧美日韩精品中文字幕| 亚洲精品国产欧美| 亚洲女在线观看| 国产精品黄页免费高清在线观看| 久久精品国产精品| 夜夜嗨av色一区二区不卡| 亚洲男女性事视频| 中文字幕日韩欧美精品在线观看| 久久久人成影片一区二区三区| 亚洲高清av在线| 日本欧美一二三区| 国产深夜精品福利| 久久噜噜噜精品国产亚洲综合| 精品久久中文字幕| 精品动漫一区二区| 久久天天躁夜夜躁狠狠躁2022| 韩国国内大量揄拍精品视频| 国产美女91呻吟求| 亚洲国产欧美在线成人app| 国内精品免费午夜毛片| 亚洲伊人第一页| 欧美一级片一区| 成人综合网网址| 欧美俄罗斯乱妇| 亚洲成人免费网站| 色爱av美腿丝袜综合粉嫩av| 韩国三级日本三级少妇99| 日韩a**站在线观看| 亚洲 日韩 国产第一| 久久精品亚洲一区| 亚洲最大福利视频网站| 亚洲精品美女久久久| 51久久精品夜色国产麻豆| 欧美成人网在线| 68精品国产免费久久久久久婷婷| 国产精品久久久999|