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

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

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

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

  至于Math類庫的使用,我們就不具體說明了。讀者也可從下面的IBM java專區鏈接中找到很多有關的知識,也可參考一些Java類庫書籍說明。當你設計高級Robocode機器人時你會發現,Math類庫是你不可缺少的一部分知識。此處我們只簡單的介紹正弦函數及余弦函數的使用。
  
  Sin
  public static double sin(double a)
  
  Returns the trigonometric sine of an angle.
  
  Parameters:
  
  a - an angle, in radians.
  
  Returns:
  
  the sine of the argument
  
  Sin函數返回三角的正弦函數,參數a是一個以double類型以弧度表示的角度值,返回類型為double.
  
  cos
  public static double cos(double a)
  
  Returns the trigonometric cosine of an angle.
  
  Parameters:
  
  a - an angle, in radians.
  
  Returns:
  
  the cosine of the argument
  
  Cos函數返回三角的余弦函數,參數a是一個以double類型的弧度表示的角值,返回類型為double.
  
  有人會問為什么不使用ScanndeRobot事件中的getRadarHeadingRadians()方法直接得到弧度。哦,你來看看Robocode中華聯盟iiley的一段說明:
  
  public void onScannedRobot(ScannedRobotEvent event) {
  enemyX=Math.sin(Util.standardMathDirRadians(getRadarHeadingRadians()))*event.getDistance();
  enemyY=Math.cos(Util.standardMathDirRadians(getRadarHeadingRadians()))*event.getDistance();
  }
  
  看起來似乎正確的,但是你實踐一下會發現他很不準確,為什么呢?原因在于getRadarHeadingRadians()函數,當你調用此函數的時候實際上雷達已經不在剛剛掃描到敵人的那個角度了,他已經轉過了十幾度甚至更多。雷達默認轉動速度是45度/robocode單位時間,實際上一般來說你用getRadarHeadingRadians()得到的值總是45度的整數倍。(一些情況除外,比如說你用了turnRadarLeft(11)類似的語句以后)。
  
  Robocode也遵循數學應用中的基本法則用兩種方法來表示方向的角度:角度制和弧度制,本文的代碼及以前文章中的代碼我們一直用的是角度制。另外一種方法就是利用ScannedRobotEvent.getBearingRadians()+robot.getHeadingRadians()得到敵人以弧度表示的方向,這個方法在本文章中沒有說明了,有愛好的朋友可以自己試試用Java.util 類庫來實現. 也可參考文檔"精確計算敵人的坐標"。大家也可比較兩種方法各自特點,這將是個很有意思的過程。
  
  移動鎖定
  當然,即使是最簡單的機器人也不會坐在那一動不動等著你來消滅。它會躲避你的進攻以及掃描,當你向它原來坐標處開火,說不定它已經跑得老遠了,當然這一切都不是我們所希望看到的。 我們的目的是要消滅它:不管他是移動或靜止的。下面我們就結合方向系統與坐標系統,來鎖定我們移動的目標。創造一個我們自己的高級掃描機器人。建議你在此處下載源代碼(resource)并看看演示效果再回到我們的文章中來。顯示如圖5:
  
 Java新學法之Robocode基本原理之坐標鎖定(下)(圖一)

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

  
圖5

  
  對比一下上面的數據,不管目標GenyMove在哪GenyRadar都能得到它精確的坐標。是不是有一種成就感!是的,敵人已經完全在我們的把握之中。即使它在移動中也無法擺脫我們雷達的掃描控制。這里只是很簡單舉了一些例子,GenyMove在每一個時間周期(有關時間周期的說明見的Rock 'em, sock 'em Robocode: Round 2)移動自己的位置并打印出移動后的坐標,而GenyRadar掃描系統不停的掃描目標,并一直追蹤,同時打印出掃描到的GenyMove方位。要害部分在我們的ScannedRobotEvent事件如列表3
  
  列表3:
  
  public void onScannedRobot( ScannedRobotEvent e )
  {
  
  double heading = e.getBearing() +getHeading();
  
  double distance = e.getDistance(); //求得距離
  
  double ager_bearing = Math.toRadians(heading % 360); //角度轉為弧度
  
  double genyX = getX() + Math.sin(ager_bearing) * distance;
  
  double genyY = getY() + Math.cos(ager_bearing) * distance;
  
  out.  
  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相關的三角函數知識,要想了解具體的,大家可從家中高中代數與幾何書中得到這一切。
  
  1.角的概念
  在平面內,角可以看作一條射線繞著它的端點旋轉而成的圖形。如圖,一條射線由原來的位置OA,繞著它的端點O按逆時方向旋轉到另一位置OB,就形成角a.旋轉開始時的射線OA叫做角a的始邊,旋轉終止時的射線OB叫做角a的終邊,射線的端點O叫做角a的頂點。習慣上,我們把按逆時針方向旋轉而成的角叫做正角;按順時針方向旋轉而成的角叫做負角.所有與a終邊相同的角包括a在內,可以用式子表示:a+K*360度,對應到Robocode的方向系統中,只要我們以機器人的heading方向做射線,延長到與屏幕交點處的角度就是我們機器人的heading角度。
  
 Java新學法之Robocode基本原理之坐標鎖定(下)(圖三)

  2.直角三角函數
  在△ABC中,∠a為直角,我們把銳角A的對邊與斜邊的比叫做∠A的正弦,記作sina;銳角a的鄰邊與斜邊的比叫做∠a的余弦,記作cosa,即
  
  sina=對邊BC/斜邊AB
  
  cosa=鄰邊AC/斜邊AB
  
Java新學法之Robocode基本原理之坐標鎖定(下)(圖四)

  3.單位圓和三角函數線
  半徑為1的圓叫做單位圓。設單位圓的圓心與坐標原點重合,則單位圓與x軸的交點分為別為A(1,0)、A′(-1,0),與y軸的交點分別為B(0,1)、B′(0,-1)。設角a的頂點在圓心O,始點與x軸的正半軸重合,終邊與單位圓相交于點P,過點P作PM垂直x軸于M,則由直角三角函數的定義可知:OM=cosa,MP=sina ,點P的坐標為(cosa,sina),即P(cosa,sina)。其中cosa=OM*1,sina=MP*1。Robocode中所有有關的坐標都可用這種方法求得。
  
  4.弧度制
  用度做單位來度量角的制度叫做角度制。數學和其他科學研究中常用另一種度量角的制度—弧度制。以角的頂點為圓心,以任意長的半徑作圓把這個角所對的弧長與半徑的比來衡量角的制度叫做弧度制.長度等于半徑的弧長叫1弧度。這段弧所對的圓心角的大小也是1弧度。通常單位“弧度”省略不寫。例:弧長為1.3325。單位就是弧度。由角度和弧度兩種單位之間的關系得到:2π弧度=360度,2/3π弧度=270度,π弧度=180度,1/2π弧度=90度,并可推出1弧度 = 360度/2π = 57°即 1弧度=角度*1

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97国产精品视频人人做人人爱| 久久久亚洲国产天美传媒修理工| 国产精品爽黄69天堂a| 亚洲男人av电影| 亚洲精品免费在线视频| 性色av一区二区三区红粉影视| 最新69国产成人精品视频免费| 国产综合视频在线观看| 久久综合色88| 日韩激情在线视频| 欧美日韩一二三四五区| 欧美性极品少妇精品网站| 国产激情久久久久| 日韩av电影中文字幕| 国产婷婷成人久久av免费高清| 91成人精品网站| 91亚洲精华国产精华| 精品激情国产视频| 欧美性猛交xxxx| 国产女人精品视频| 91成人精品网站| 亚洲大胆美女视频| 久久久久久成人精品| 国产精品久久久久秋霞鲁丝| 日韩av一区在线| 成年人精品视频| 91成品人片a无限观看| 九九九热精品免费视频观看网站| 久久久99免费视频| 精品国产精品自拍| 精品亚洲精品福利线在观看| 欧美日韩国产色| 91九色国产社区在线观看| 亚洲a区在线视频| 精品久久久久久久久久久| 亚洲视屏在线播放| 亚洲加勒比久久88色综合| 在线精品视频视频中文字幕| 亚洲人成在线免费观看| 亚洲毛片在线观看.| 欧美在线一区二区视频| 欧美日韩亚洲精品一区二区三区| 日韩动漫免费观看电视剧高清| 成人福利视频在线观看| 色哟哟入口国产精品| 91日韩在线视频| 日韩av在线网址| 国产欧美 在线欧美| 欧美丰满少妇xxxx| 亚洲品质视频自拍网| 日韩在线免费视频观看| 亚洲福利精品在线| 欧美日韩久久久久| 欧美成年人在线观看| 亚洲欧美成人在线| 国产日韩欧美视频在线| 在线视频中文亚洲| 51精品在线观看| 国产精品精品久久久| 欧美中文字幕在线观看| 国产成人av在线| 国产热re99久久6国产精品| 欧美色视频日本高清在线观看| 国产成人极品视频| 青青久久av北条麻妃海外网| 久久精品国产清自在天天线| 日韩av免费在线播放| 国产精品久久99久久| 亚洲视频国产视频| 91伊人影院在线播放| 91影视免费在线观看| 亚洲欧美国产精品专区久久| 国产精品v片在线观看不卡| 久久久精品在线观看| 国产亚洲一区精品| 亚洲欧美日韩第一区| 亚洲国产成人久久综合| 欧美黄色片视频| 久久成人精品视频| 亚洲欧美日韩综合| 午夜精品久久久久久久久久久久久| 最新69国产成人精品视频免费| 日韩在线视频观看正片免费网站| 日韩精品在线观看视频| 伊人精品在线观看| 欧亚精品在线观看| 成人黄色免费在线观看| 2019国产精品自在线拍国产不卡| 久久久精品美女| 国产亚洲欧洲在线| 欧美成人免费视频| 日韩欧美精品免费在线| 久久电影一区二区| 成人网页在线免费观看| 日本亚洲精品在线观看| 亚洲白拍色综合图区| 全色精品综合影院| 97热在线精品视频在线观看| 欧美电影免费观看| 日韩在线欧美在线国产在线| 92国产精品久久久久首页| 奇米4444一区二区三区| 色阁综合伊人av| 久久手机免费视频| 正在播放欧美视频| 亚洲va国产va天堂va久久| 91色视频在线导航| 91精品免费久久久久久久久| zzjj国产精品一区二区| 久久精品亚洲精品| 久久九九国产精品怡红院| 欧美色欧美亚洲高清在线视频| 国产精品27p| 亚洲国产欧美精品| 国产九九精品视频| 日韩大胆人体377p| 亚洲色图欧美制服丝袜另类第一页| 亚洲高清在线观看| 国产精品入口尤物| 久久99精品久久久久久青青91| 日韩美女在线播放| 国内精品国产三级国产在线专| 亚洲国产成人一区| 国产精品久久久久久久美男| 亚洲欧美制服另类日韩| 亚洲视频一区二区三区| 色av吧综合网| 亚洲福利影片在线| 日韩日本欧美亚洲| 亚洲第一精品久久忘忧草社区| 国产精品极品尤物在线观看| 夜夜嗨av色一区二区不卡| 97国产精品视频人人做人人爱| 92福利视频午夜1000合集在线观看| 91久久国产精品| 国产精品视频白浆免费视频| 欧美又大又粗又长| 日韩精品高清在线观看| 91九色综合久久| 国产精品96久久久久久| 日本在线观看天堂男亚洲| 国产丝袜精品第一页| 亚洲精品福利视频| 日本精品中文字幕| 日日骚久久av| 欧美激情亚洲另类| 国产z一区二区三区| 亚洲热线99精品视频| 国产亚洲精品激情久久| 91精品国产沙发| 欧美精品一区二区三区国产精品| 国产亚洲欧洲高清一区| 成人淫片在线看| 国产成人综合精品在线| 国产99在线|中文| 欧美成aaa人片在线观看蜜臀| 日韩免费看的电影电视剧大全| 欧美裸体xxxxx| 欧美丝袜一区二区| 亚洲福利视频网站| 欧美国产日韩一区| 久久精品视频va| 日韩中文字幕在线| 久久琪琪电影院|