利用Python實現飛彈自動追蹤!室友面前的裝逼利器!史上最詳細!

利用Python實現導彈自動追蹤!室友面前的裝逼利器!史上最詳細!

利用Python實現導彈自動追蹤!室友面前的裝逼利器!史上最詳細!

不好意思 ,上傳錯了。接著看圖!

利用Python實現導彈自動追蹤!室友面前的裝逼利器!史上最詳細!

由於待會要用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實現導彈自動追蹤!室友面前的裝逼利器!史上最詳細!

利用Python實現導彈自動追蹤!室友面前的裝逼利器!史上最詳細!

利用Python實現導彈自動追蹤!室友面前的裝逼利器!史上最詳細!

利用Python實現導彈自動追蹤!室友面前的裝逼利器!史上最詳細!

好,由於最近在用Python的pygame庫製作小遊戲玩,接下來我們就用pygame來演示一下這個效果,效果如下圖:

利用Python實現導彈自動追蹤!室友面前的裝逼利器!史上最詳細!

很簡單的代碼如下:

利用Python實現導彈自動追蹤!室友面前的裝逼利器!史上最詳細!

利用Python實現導彈自動追蹤!室友面前的裝逼利器!史上最詳細!

但是實際運行效果並不好:

利用Python實現導彈自動追蹤!室友面前的裝逼利器!史上最詳細!

大致方向相同,但是圖片箭頭的尖點並沒有一直跟隨鼠標,這是為什麼呢。經過我的研究(就因為這個問題沒解決一直沒發佈),

我發現原來是這個圖旋轉的機制問題,我們看看旋轉後的圖片變成什麼樣了:

利用Python實現導彈自動追蹤!室友面前的裝逼利器!史上最詳細!

旋轉後的圖片變成了藍色的那個範圍,根據旋轉角度的不同,所變成的圖片大小也不一樣,我們看旋轉90的情況

利用Python實現導彈自動追蹤!室友面前的裝逼利器!史上最詳細!

利用Python實現導彈自動追蹤!室友面前的裝逼利器!史上最詳細!

利用Python實現導彈自動追蹤!室友面前的裝逼利器!史上最詳細!

1,2象限

利用Python實現導彈自動追蹤!室友面前的裝逼利器!史上最詳細!

3,4象限,它的旋轉只有正負0—180,所以3,4象限就是負角

利用Python實現導彈自動追蹤!室友面前的裝逼利器!史上最詳細!

利用Python實現導彈自動追蹤!室友面前的裝逼利器!史上最詳細!

利用Python實現導彈自動追蹤!室友面前的裝逼利器!史上最詳細!

大功告成,最後附上全部的算法代碼.

利用Python實現導彈自動追蹤!室友面前的裝逼利器!史上最詳細!


分享到:


相關文章: