精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

通過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乘cos(a)和sin(a)即可。

計算sin(a)和cos(a),正弦對比斜,余弦鄰比斜,斜邊可以利用兩點距離公式計算出,即:

于是

AC的長度就是導彈的速度乘以時間即 |AC|=vt,然后即可計算出AD和CD的長度,于是這一個時間片過去后,導彈應該出現在新的位置C點,他的坐標就是老的點A的x增加AD和y減去CD。

于是,新的C點坐標就是:

只要一直反復循環執行這個操作即可,好吧,為了更形象,把第一個時間片和第二個時間片放在一起看看:

第一個是時間片構造出的三角形是ABE,經過一個時間片后,目標從B點走到了D點,導彈此時在C點,于是構造新的三角形CDF,重復剛才的計算過程即可,圖中的角∠b就是導彈需要旋轉的角度,現實中只需要每個時間片修正導彈的方向就可以了,具體怎么讓導彈改變方向,這就不是我們需要研究的問題了

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

很簡單的代碼如下: 

  1. import pygame,sys  
  2. from math import *  
  3. pygame.init()  
  4. screen=pygame.display.set_mode((800,700),0,32)  
  5. missile=pygame.image.load('element/red_pointer.png').convert_alpha()  
  6. x1,y1=100,600           #導彈的初始發射位置  
  7. velocity=800            #導彈速度  
  8. time=1/1000             #每個時間片的長度  
  9. clock=pygame.time.Clock()  
  10. old_angle=0  
  11. while True:  
  12.     for event in pygame.event.get():  
  13.         if event.type==pygame.QUIT:  
  14.             sys.exit()  
  15.     clock.tick(300)  
  16.     x,y=pygame.mouse.get_pos()          #獲取鼠標位置,鼠標就是需要打擊的目標  
  17.     distance=sqrt(pow(x1-x,2)+pow(y1-y,2))      #兩點距離公式  
  18.     section=velocity*time               #每個時間片需要移動的距離  
  19.     sina=(y1-y)/distance  
  20.     cosa=(x-x1)/distance  
  21.     angle=atan2(y-y1,x-x1)              #兩點線段的弧度值  
  22.     x1,y1=(x1+section*cosa,y1-section*sina)  
  23.     d_angle = degrees(angle)        #弧度轉角度  
  24.     screen.blit(missile, (x1-missile.get_width(), y1-missile.get_height()/2))  
  25.     dis_angle=d_angle-old_angle          #dis_angle就是到下一個位置需要改變的角度  
  26.     old_angle=d_angle                    #更新初始角度  
  27.     pygame.display.update() 

如果僅把導彈考慮為一個質點的話,那么以上算法就已經足矣,我沒有做導彈的旋轉,因為一個質點也不分頭尾不需要旋轉,當然這前提得是你加載的導彈圖片很小的時候不旋轉看起來也沒什么問題。但是在pygame里面做旋轉并不是一件容易的事情,我們先把圖片替換成一張矩形的,再加入旋轉函數看看效果如何

 

  1. missiled = pygame.transform.rotate(missile, -(d_angle))  
  2. screen.blit(missiled, (x1-missile.get_width(), y1-missile.get_height()/2)) 

因為圖片的坐標點是它的左上角的點,所以如果我們想讓圖片的坐標固定在箭頭尖點,那么把圖片實際打印位置x減少圖片長度,y減少一半寬度就行。

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

大致方向相同,但是圖片箭頭的尖點并沒有一直跟隨鼠標,這是為什么呢。經過一番研究,我發現原來是這個圖旋轉的機制問題,我們看看旋轉后的圖片變成什么樣了:

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

我們發現,旋轉后的圖片不僅面積變大了,導彈頭的位置也變了。那應該怎么解決這個問題呢?思路是,每一次旋轉圖片以后,求出旋轉圖的頭位置(圖中的綠色箭頭點),然后把綠圖的打印位置移動一下,下,x,y分別移動兩個頭的距離,就可以讓旋轉后的導彈頭對準實際我們參與運算的那個導彈頭的位置,移動后應該是這樣的:

這樣,兩個導彈頭的點就一致了。接下來我們分析求旋轉后的導彈頭的算法。根據旋轉角度的不同,旋轉角在不同象限參數不一樣,所以我們分為這四種情況

1,2象限

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

顯示圖片的時候我們將他移動 

  1. screen.blit(missiled, (x1-width+(x1-C[0]),y1-height/2+(y1-C[1]))) 

這里的 (x1-width, y1-height/2) 其實才是上圖中的 (x1, y1)

所以最后我們加入相關算法代碼,效果就比較完美了

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

  1. import pygame,sys  
  2. from math import *  
  3. pygame.init()  
  4. font1=pygame.font.SysFont('microsoftyaheimicrosoftyaheiui',23)  
  5. textc=font1.render('*',True,(250,0,0))  
  6. screen=pygame.display.set_mode((800,700),0,32)  
  7. missile=pygame.image.load('element/rect1.png').convert_alpha()  
  8. height=missile.get_height()  
  9. width=missile.get_width()  
  10. pygame.mouse.set_visible(0)  
  11. x1,y1=100,600           #導彈的初始發射位置  
  12. velocity=800            #導彈速度  
  13. time=1/1000             #每個時間片的長度  
  14. clock=pygame.time.Clock()  
  15. A=()  
  16. B=()  
  17. C=()  
  18. while True: 
  19.     for event in pygame.event.get():  
  20.         if event.type==pygame.QUIT:  
  21.             sys.exit()  
  22.     clock.tick(300)  
  23.     x,y=pygame.mouse.get_pos()          #獲取鼠標位置,鼠標就是需要打擊的目標  
  24.     distance=sqrt(pow(x1-x,2)+pow(y1-y,2))      #兩點距離公式  
  25.     section=velocity*time               #每個時間片需要移動的距離  
  26.     sina=(y1-y)/distance  
  27.     cosa=(x-x1)/distance 
  28.     angle=atan2(y-y1,x-x1)              #兩點間線段的弧度值  
  29.     fangle=degrees(angle)               #弧度轉角度  
  30.     x1,y1=(x1+section*cosa,y1-section*sina)  
  31.     missiled=pygame.transform.rotate(missile,-(fangle)) 
  32.     if 0<=-fangle<=90:  
  33.         A=(width*cosa+x1-width,y1-height/2)  
  34.         B=(A[0]+height*sina,A[1]+height*cosa)  
  35.     if 90<-fangle<=180:  
  36.         A = (x1 - width, y1 - height/2+height*(-cosa))  
  37.         B = (x1 - width+height*sina, y1 - height/2)  
  38.     if -90<=-fangle<0:  
  39.         A = (x1 - width+missiled.get_width(), y1 - height/2+missiled.get_height()-height*cosa)  
  40.         B = (A[0]+height*sina, y1 - height/2+missiled.get_height())  
  41.     if -180<-fangle<-90:  
  42.         A = (x1-width-height*sina, y1 - height/2+missiled.get_height())  
  43.         B = (x1 - width,A[1]+height*cosa )  
  44.     C = ((A[0] + B[0]) / 2, (A[1] + B[1]) / 2)  
  45.     screen.fill((0,0,0))  
  46.     screen.blit(missiled, (x1-width+(x1-C[0]),y1-height/2+(y1-C[1])))  
  47.     screen.blit(textc, (x,y)) #鼠標用一個紅色*代替  
  48.     pygame.display.update() 

以上便是用Python模擬導彈自動追蹤的代碼實例。 

 

責任編輯:龐桂玉 來源: 馬哥Linux運維
相關推薦

2021-07-15 11:35:27

Python自動追蹤代碼

2022-03-03 10:49:46

Python自動追蹤代碼

2021-05-25 10:05:39

Python模擬導彈代碼

2022-05-23 08:23:24

鏈路追蹤SleuthSpring

2009-06-24 10:44:08

2018-06-29 10:15:20

PythonOpenCV人臉識別

2020-01-16 09:00:00

AI人工智能ML

2021-11-15 04:00:07

Linux 內核動態

2021-11-14 07:29:55

Linux 內核靜態追蹤Linux 系統

2023-07-02 14:05:13

2021-11-29 18:11:33

自動化現代化網絡優化

2022-03-03 12:24:17

暗碼追蹤數字水印打印機

2025-04-02 00:33:00

2025-04-01 02:00:22

2022-06-04 15:02:56

數字化轉型超自動化工具

2015-09-16 11:13:51

ChefWindows集群運維

2020-12-17 09:20:44

Python自動掃雷腳本

2023-08-02 08:03:08

Python線程池

2022-09-15 10:03:42

Jaeger分布式追蹤系統

2011-11-23 14:35:32

點贊
收藏

51CTO技術棧公眾號

国产九色porny| 亚洲最大的av网站| 这里只有久久精品| 国产亚洲精品精品国产亚洲综合| 国产精品初高中害羞小美女文| 91色在线视频| 精品成人av一区二区在线播放| 国内精品视频在线观看| 欧美一区二区视频在线观看| 成年人午夜视频在线观看| 福利视频在线导航| 国产精品羞羞答答xxdd| 国产精品福利观看| 国产亚洲精久久久久久无码77777| 亚洲自拍都市欧美小说| 欧美一级电影网站| 无码人妻丰满熟妇区毛片| 91精品久久| 国产日产精品1区| 高清av免费一区中文字幕| 五月激情丁香网| 亚洲国产二区| 久久综合免费视频影院| 性欧美13一14内谢| 57pao国产一区二区| 欧美日韩国产综合一区二区三区| 丁香花在线影院观看在线播放| 888av在线| 26uuu国产在线精品一区二区| 444亚洲人体| 中文字幕乱码在线观看| 国产一区成人| 欧美激情一级欧美精品| 黄色一级片一级片| 精品久久电影| 亚洲精品一区二区三区婷婷月| 亚洲成人av免费观看| 欧美aaa级| 色婷婷久久99综合精品jk白丝| av无码久久久久久不卡网站| 黄在线免费看| 国产精品久线观看视频| 特级西西444www大精品视频| 日韩a在线观看| 波多野洁衣一区| 懂色av一区二区三区在线播放| 中文字幕视频免费观看| 日韩电影一二三区| 日本亚洲精品在线观看| 久久久国产精品成人免费| 在线精品一区| 高清欧美性猛交xxxx| 国产亚洲欧美精品久久久久久| 欧美激情日韩| 欧美刺激性大交免费视频| 黄色录像免费观看| 亚洲高清影视| 九九热99久久久国产盗摄| 婷婷伊人五月天| 午夜精品影院| 欧美精品成人91久久久久久久| 日韩欧美综合视频| 一区二区三区国产精华| 免费不卡欧美自拍视频| 欧美日韩免费一区二区| 欧美日韩午夜| 午夜精品久久久久久久白皮肤| 日本视频www| 国产手机视频一区二区| 国产99久久精品一区二区 夜夜躁日日躁| 国产成人免费观看视频| 亚洲免费影院| 国产精品福利久久久| 中文字幕在线观看欧美| 国内精品视频666| 成人毛片网站| 色鬼7777久久| 欧美激情一区三区| 黄色www在线观看| 欧美草逼视频| 欧美性猛交xxxxx免费看| 九九视频精品在线观看| 国产日本亚洲| 日韩av在线直播| 日本免费www| 午夜电影亚洲| 国产福利成人在线| 国产视频一二三四区| 97久久人人超碰| 亚洲一区二区在线观| 女人黄色免费在线观看| 色综合久久久久久久久| 中文字幕一区二区在线观看视频 | 一区二区在线观看av| 国产v片免费观看| 欧美与亚洲与日本直播| 日韩丝袜美女视频| 免费毛片视频网站| 自拍偷拍欧美专区| 国产成人亚洲综合91精品| 99热这里只有精品66| 91欧美一区二区| 中国一级黄色录像| 丝袜美腿诱惑一区二区三区| 制服.丝袜.亚洲.另类.中文| 亚洲精品乱码久久久久久久| 久久在线电影| 欧洲亚洲女同hd| av中文字幕免费| 久久精品夜色噜噜亚洲aⅴ| 真人做人试看60分钟免费| 美女日韩欧美| 精品国产凹凸成av人导航| 夫妇露脸对白88av| av成人毛片| 波多野结衣久草一区| avtt亚洲| 在线区一区二视频| 亚洲久久久久久| 一区二区电影在线观看| 国产精品中文字幕久久久| 婷婷丁香一区二区三区| 一区二区三区免费在线观看| 午夜激情在线观看视频| 日本成人a网站| 欧美国产日产韩国视频| 亚洲一区二区色| 久久久精品国产免大香伊| 17c丨国产丨精品视频| 亚洲免费一区| 国产一区二区三区丝袜| 亚洲熟女综合色一区二区三区| 国产精品1区2区| 中文字幕中文字幕在线中心一区| 日本精品网站| 亚洲美女激情视频| 中文字幕亚洲精品在线| aa级大片欧美| 国产女主播自拍| 97视频一区| 欧美成人午夜免费视在线看片| 国产精品国产三级国产普通话对白| 国产无人区一区二区三区| av动漫免费看| 你微笑时很美电视剧整集高清不卡| 97免费中文视频在线观看| 亚洲精品字幕在线| 亚洲香肠在线观看| 91av免费观看| 欧美人成在线| 成人免费在线一区二区三区| hd国产人妖ts另类视频| 日韩欧美在线观看一区二区三区| 日本美女黄色一级片| 精品一区二区三区在线播放| 伊人狠狠色丁香综合尤物| 日韩色性视频| 久久国产精品亚洲| 国产av一区二区三区| 亚洲最大的成人av| 亚洲精品激情视频| 国产精品人人爽人人做我的可爱| 免费久久99精品国产自| 三上悠亚国产精品一区二区三区| 亚洲免费成人av电影| 精品乱码一区内射人妻无码| 国产精品传媒视频| 色婷婷综合在线观看| 亚洲特级毛片| 欧美二区在线| 久久亚洲精品人成综合网| 久久视频在线直播| 亚洲精品97久久中文字幕无码| 亚洲3atv精品一区二区三区| 亚洲AV无码国产精品| 日本特黄久久久高潮| 中文字幕人成一区| 99久久人爽人人添人人澡| 97在线视频免费播放| 国产主播福利在线| 3751色影院一区二区三区| 国产污视频在线看| 久久精品一区二区三区不卡牛牛| 91av视频免费观看| 在线精品一区| 亚洲一区二区在线看| 中文字幕区一区二区三| 日韩av不卡电影| 免费黄色网址在线观看| 亚洲成avwww人| 久久久久久久亚洲| 亚洲视频在线一区观看| 亚洲国产果冻传媒av在线观看| 青青草精品视频| 丰满的少妇愉情hd高清果冻传媒| 国内亚洲精品| 国产三级精品在线不卡| 人人精品久久| 欧美亚洲激情视频| 麻豆视频在线| 亚洲男人天堂九九视频| 国产欧美日韩综合精品一区二区三区| 亚洲成人av一区| 亚洲 欧美 变态 另类 综合| 成人国产精品免费观看视频| 成年网站在线播放| 99视频在线精品国自产拍免费观看| 亚洲欧美久久久久一区二区三区| 久久久久观看| 亚洲直播在线一区| 日本欧美一区| 欧美在线免费观看| a篇片在线观看网站| 亚洲日韩中文字幕在线播放| 亚洲欧美黄色片| 777亚洲妇女| 国产第一页在线观看| 午夜精品福利视频网站| 婷婷久久综合网| 欧美国产精品中文字幕| 91精品人妻一区二区| 成人高清在线视频| 国产不卡的av| 久久国产精品色婷婷| 国产又大又硬又粗| 亚洲精品影视| 精品国产av无码一区二区三区 | 青青青在线视频播放| 99热在线成人| 亚洲国产一区二区在线| 欧美人与拘性视交免费看| 国产日韩欧美亚洲一区| 136国产福利精品导航网址应用| 国产深夜精品福利| 成人综合网站| 国产精品久久久久9999| 欧美成人免费电影| 全球成人中文在线| 日韩激情电影免费看| 777777777亚洲妇女| 超碰资源在线| 97超级碰碰碰久久久| av资源在线播放| 欧美激情精品在线 | 欧美一区二区三区精品电影| 国模雨婷捆绑高清在线| 久久久久久久91| 阿v视频在线观看| 98精品在线视频| 女人高潮被爽到呻吟在线观看 | 自拍另类欧美| 欧美特黄一级大片| 亚洲永久激情精品| 91精品天堂福利在线观看| 波多野结衣三级在线| 成人在线免费观看视频| 一本色道久久综合亚洲精品婷婷| 日韩一区三区| 无码毛片aaa在线| 欧美在线黄色| av在线com| 亚洲在线视频| 日韩中文字幕组| 久久精品99国产精品日本| 玖玖爱视频在线| 国产一区二区三区香蕉| 韩国av中国字幕| 99久久er热在这里只有精品15| 精品国产av无码| 亚洲天天做日日做天天谢日日欢| 男人操女人的视频网站| 亚洲1区2区3区4区| 色婷婷久久综合中文久久蜜桃av| 欧美精品1区2区| 乱精品一区字幕二区| 亚洲精品视频网上网址在线观看| 国产私人尤物无码不卡| 视频直播国产精品| 肉体视频在线| 国产99视频在线观看| 日韩五码电影| 国产精品免费一区二区| 精品中文一区| 中国女人做爰视频| 久久福利精品| 中文字幕第17页| 成人动漫中文字幕| 国产又黄又粗又猛又爽的| 亚洲国产精品久久人人爱蜜臀| 高清乱码免费看污| 欧美一级欧美三级在线观看| 日中文字幕在线| 久久五月天色综合| 三妻四妾的电影电视剧在线观看| 国产欧美精品在线| 另类尿喷潮videofree| 亚洲高清123| 亚洲精品男同| 亚洲女人在线观看| 久久久高清一区二区三区| 欧产日产国产v| 在线观看日韩毛片| 色偷偷在线观看| 久久精品国产免费观看| 亚洲天堂资源| 91嫩草视频在线观看| 成人aaaa| 国产91在线视频观看| 国产精品911| 国产人与禽zoz0性伦| 色综合久久99| 成人午夜免费福利| 最近2019年手机中文字幕| 九九精品调教| 91日本视频在线| 成人羞羞动漫| 国产成人精品无码播放| va亚洲va日韩不卡在线观看| 无码人妻精品一区二区三区夜夜嗨| 色www精品视频在线观看| 日本黄色一区二区三区| 久久国产精品久久久久久| 成人综合网站| 色女孩综合网| 老司机久久99久久精品播放免费| 黄色免费视频网站| 亚洲国产一二三| 成人1区2区3区| 久久天天躁日日躁| 自拍偷拍亚洲图片| 亚洲一区二区三区精品动漫| 久久激情综合| 精品无码在线视频| 午夜精品久久久久久不卡8050 | 亚洲欧美日韩精品久久亚洲区 | 狠狠色香婷婷久久亚洲精品| 亚洲乱色熟女一区二区三区| 久久中文字幕在线视频| 成人动漫视频在线观看| 一区二区三区四区欧美| 蜜桃久久av一区| 蜜桃av免费观看| 欧美色图免费看| 日本在线观看网站| 国产在线播放不卡| 欧美gvvideo网站| 亚洲精品成人在线播放| 成人免费在线观看入口| 国产免费黄色网址| 欧美成人四级hd版| youjizz亚洲| 91成人在线观看喷潮教学| www.激情成人| 久久夜色精品国产噜噜亚洲av| 亚洲精品资源美女情侣酒店| 美女福利一区二区| 天天综合色天天综合色hd| 美日韩一区二区| 91麻豆精品成人一区二区| 日韩欧美一区二区在线视频| 国产啊啊啊视频在线观看| 精品国产福利| 久久久夜夜夜| 成人无码精品1区2区3区免费看| 欧美高清视频不卡网| 国产激情视频在线| 91亚洲国产成人精品性色| 亚洲视频高清| 欧美老熟妇乱大交xxxxx| 欧美性一区二区| 大地资源网3页在线观看| 国产99午夜精品一区二区三区 | 亚洲区小说区图片区| 日本欧美一级片| 久久中文字幕二区| 中文写幕一区二区三区免费观成熟| 性做久久久久久| 成人高清在线| 91免费在线观看网站| 日韩香蕉视频| 国产黄色录像片| 亚洲第一福利网站| 性欧美18一19sex性欧美| 激情图片qvod| 91在线观看下载| 国产精品伦一区二区三区| 亚州精品天堂中文字幕| 欧美限制电影| zjzjzjzjzj亚洲女人| 欧美午夜电影在线播放| 欧美巨大xxxx做受沙滩| 日本一区二区不卡高清更新| 国产精品一区二区久久不卡 | 精品区一区二区| 免费欧美电影| 丁香色欲久久久久久综合网| 国产亚洲精品免费| 亚洲精品一级片| 成人性生交xxxxx网站| 亚洲在线日韩|