不好意思 ,上傳錯了。接著看圖!
由於待會要用pygame演示,他的座標系是y軸向下,所以這裡我們也用y向下的座標系。
算法總的思想就是根據上圖,把時間t分割成足夠小的片段(比如1/1000,這個時間片越小越精確),每一個片段分別構造如上三角形,計算出導彈下一個時間片走的方向(即∠a)和走的路程(即vt=|AC|),這時候目標再在第二個時間片移動了位置,這時剛才計算的C點又變成了第二個時間片的初始點,這時再在第二個時間片上在C點和新的目標點構造三角形計算新的vt,然後進入第三個時間片,如此反覆即可。
假定導彈和目標的初始狀態下座標分別是(x1,y1),(x,y),構造出直角三角形ABE,這個三角形用來求∠a的正弦和餘弦值,因為vt是自己設置的,我們需要計算A到C點x和y座標分別移動了多少,移動的值就是AD和CD的長度,這兩個分別用vt乘cosa和sina即可。
計算sina和cosa,正弦對比斜,餘弦鄰比斜,斜邊可以利用兩點距離公式計算出,即:
好,由於最近在用Python的pygame庫製作小遊戲玩,接下來我們就用pygame來演示一下這個效果,效果如下圖:
很簡單的代碼如下:
但是實際運行效果並不好:
大致方向相同,但是圖片箭頭的尖點並沒有一直跟隨鼠標,這是為什麼呢。經過我的研究(就因為這個問題沒解決一直沒發佈),
我發現原來是這個圖旋轉的機制問題,我們看看旋轉後的圖片變成什麼樣了:
旋轉後的圖片變成了藍色的那個範圍,根據旋轉角度的不同,所變成的圖片大小也不一樣,我們看旋轉90的情況
1,2象限
3,4象限,它的旋轉只有正負0—180,所以3,4象限就是負角
大功告成,最後附上全部的算法代碼.
閱讀更多 繁華落盡and曲終人散 的文章