2009年5月15日 星期五

斜線路徑規劃

假設不做斜線運動的話,在提升轉彎速度是一件非常困難的事情。


所以這次的重心就放在斜線的運動上


繼上一篇座標轉換,將原本的4個絕對方向轉換成8個絕對方向



為了讓程式方向判斷,我讓這8個方向定義成角度,以方便在轉換成相對動作時,比較好思考。


絕對方向轉相對動作我是使用,現在的角度-過去的角度,即可求得相對動作。


不過比較需要注意的就是溢位的問題,所以需要加入一點判斷式


 


if ((現在的角度-過去的角度) >360)  (現在的角度-過去的角度)-360;


else if ((現在的角度-過去的角度) <-360)  (現在的角度-過去的角度)+360;


 


因為得到的都是角度,所以當現在的角度-過去的角度得到為-45度時,即可知道是右轉45度。


反之,現在的角度-過去的角度得到為45度時,即可知道為左轉45度。


在絕對方向轉相對動作大概有這幾種動作需要轉換


90度轉→連續的2個同方向的45度轉,可以視為1個90度轉的動作


 


45度轉


V-turn→斜線運動的90度轉,其實這和正常的90度轉差不多。


J-turn→45度轉+90度轉,可以視為一個135度的動作




U-turn→45度+90度轉+45度轉,可以視為一個180度的動作




以下是我定義的動作。


這是由直線變到斜線的動作


這是由斜線變成直線的動作


另外還2個U-turn的動作


大至上我的斜線動作已經完成,在規劃這些動作時,思考規劃動作是最浪費時間的。如果用以往的if then else 寫的話,可能真的會寫到爆掉,而且在維護上也非常困難。老大提供這個座標轉換的方式確實方便實用。



 



 


看著老鼠可以衝斜線,還滿開心的,接著可以挑戰轉彎的極速了。光增加了斜線運動,最短路徑的轉彎速度至少比以前提升30%~50%之多(我認為)。


或許有些人看到電腦鼠覺得沒什麼,可是當深入其中的時後,卻愈做愈覺得有趣。一直到現在,我心中的疑問老是:「為什麼別人的老鼠的動作可以這麼順暢,怎麼做到的」。等一步一步解開問題的時後,真的會豁然開朗。


下一步需要解惑的是,為何別人的斜線動作很smooth,而我的動作卻很急燥。哈,或許老鼠和主人的個性一樣,暴燥卻不肯安定。


1 則留言: