很多玩過飛行射擊類游戲的朋友都對跟蹤導彈印象深刻,手中有這樣一款武器常常能夠戰無不勝,但是敵人射出的導彈則可能成為玩家的噩夢。其實實現導彈跟蹤的方法並不復雜,只需要一些簡單的平面解析幾何知識就可以做到。
算法分析
假設導彈旋轉角速度為omega,運動速度為v。下圖顯示了導彈和目標在坐標軸中的初始狀態。
初始時刻,目標與導彈的運動方向都是-Y,位置分別為(x1,y1),(x2,y2),連接導彈與目標的坐標,得到一條線段,該線段與-Y軸夾角為c;導彈與-Y方向的夾角為b,b是導彈已旋轉的角度,此時為0;導彈方向與線段的夾角為a,a就是導彈還需要旋轉的角度。此時:
c=90-Math.atan2(y2-y1,x2-x1)*180/Math.PI;
b=0;
a=c-b;
為了方便計算將c轉換為360度以內的正值:
c=(270+Math.atan2(y2-y1,x2-x1)*180/Math.PI)%360;
取得這些值以后,可以計算下一時刻導彈的旋轉角度和應該處在的位置。如果a小於角速度omega,導彈旋轉角度a,正好可以指向目標,否則將旋轉omega度,所以 b=a<omega?a:omega;
復制代碼導彈位置變更為
x2=x2+Math.sin(b*Math.PI/180)*v;
y2=y2+Math.cos(b*Math.PI/180)*v;
在新的時刻,目標移動到新的位置,同時導彈旋轉角度為b,如下圖
然后重新進行上面的計算,修正導彈位置和旋轉角度,如此反復,直到導彈命中目標,或者因超出時間限制而銷毀。