幼儿饰品瑜伽美体用品微软
投稿投诉
微软创意
爱情通信
用品婚姻
爱好看病
美体软件
影音星座
瑜伽周边
星座办公
饰品塑形
搞笑减肥
幼儿两性
智家潮品

用Python实现导弹自动追踪,超燃

  作者丨半壶砂
  https:www。cnblogs。comhalfsandp7976636。html
  自动追踪算法,在我们制作射击类游戏时经常会用到。这个听起来很高大上的东西,其实并不是军事学的专利,从数学上来说就是解微分方程。
  这个没有点数学基础是很难算出来的。但是我们有了计算机就不一样了,依靠计算机极快速的运算速度,我们利用微分的思想,加上一点简单的三角学知识,就可以实现它。
  好,话不多说,我们来看看它的算法原理,看图:
  由于待会要用pygame演示,它的坐标系是y轴向下,所以这里我们也用y向下的坐标系。
  算法总的思想就是根据上图,把时间t分割成足够小的片段(比如11000,这个时间片越小越精确),每一个片段分别构造如上三角形,计算出导弹下一个时间片走的方向(即a)和走的路程(即vtAC),这时候目标再在第二个时间片移动了位置,这时刚才计算的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的长度就是导弹的速度乘以时间即ACvt,然后即可计算出AD和CD的长度,于是这一个时间片过去后,导弹应该出现在新的位置C点,他的坐标就是老的点A的x增加AD和y减去CD。
  于是,新的C点坐标就是:
  只要一直反复循环执行这个操作即可,好吧,为了更形象,把第一个时间片和第二个时间片放在一起看看:
  第一个是时间片构造出的三角形是ABE,经过一个时间片后,目标从B点走到了D点,导弹此时在C点,于是构造新的三角形CDF,重复刚才的计算过程即可,图中的角b就是导弹需要旋转的角度,现实中只需要每个时间片修正导弹的方向就可以了,具体怎么让导弹改变方向,这就不是我们需要研究的问题了
  好,由于最近在用Python的pygame库制作小游戏玩,接下来我们就用pygame来演示一下这个效果,效果如下图:
  很简单的代码如下:importpygame,sys
  frommathimport
  pygame。init
  screenpygame。display。setmode((800,700),0,32)
  missilepygame。image。load(elementredpointer。png)。convertalpha
  x1,y1100,600导弹的初始发射位置
  velocity800导弹速度
  time11000每个时间片的长度
  clockpygame。time。Clock
  oldangle0
  whileTrue:
  foreventinpygame。event。get:
  ifevent。typepygame。QUIT:
  sys。exit
  clock。tick(300)
  x,ypygame。mouse。getpos获取鼠标位置,鼠标就是需要打击的目标
  distancesqrt(pow(x1x,2)pow(y1y,2))两点距离公式
  sectionvelocitytime每个时间片需要移动的距离
  sina(y1y)distance
  cosa(xx1)distance
  angleatan2(yy1,xx1)两点线段的弧度值
  x1,y1(x1sectioncosa,y1sectionsina)
  dangledegrees(angle)弧度转角度
  screen。blit(missile,(x1missile。getwidth,y1missile。getheight2))
  disangledangleoldangledisangle就是到下一个位置需要改变的角度
  oldangledangle更新初始角度
  pygame。display。update
  如果仅把导弹考虑为一个质点的话,那么以上算法就已经足矣,我没有做导弹的旋转,因为一个质点也不分头尾不需要旋转,当然这前提得是你加载的导弹图片很小的时候不旋转看起来也没什么问题。但是在pygame里面做旋转并不是一件容易的事情,我们先把图片替换成一张矩形的,再加入旋转函数看看效果如何missiledpygame。transform。rotate(missile,(dangle))
  screen。blit(missiled,(x1missile。getwidth,y1
  missile。getheight2))
  因为图片的坐标点是它的左上角的点,所以如果我们想让图片的坐标固定在箭头尖点,那么把图片实际打印位置x减少图片长度,y减少一半宽度就行。但是实际运行效果并不好:
  大致方向相同,但是图片箭头的尖点并没有一直跟随鼠标,这是为什么呢。经过一番研究,我发现原来是这个图旋转的机制问题,我们看看旋转后的图片变成什么样了:
  旋转后的图片变成了蓝色的那个范围,根据旋转角度的不同,所变成的图片大小也不一样,我们看旋转90的情况
  我们发现,旋转后的图片不仅面积变大了,导弹头的位置也变了。那应该怎么解决这个问题呢?思路是,每一次旋转图片以后,求出旋转图的头位置(图中的绿色箭头点),然后把绿图的打印位置移动一下,下,x,y分别移动两个头的距离,就可以让旋转后的导弹头对准实际我们参与运算的那个导弹头的位置,移动后应该是这样的:
  这样,两个导弹头的点就一致了。接下来我们分析求旋转后的导弹头的算法。根据旋转角度的不同,旋转角在不同象限参数不一样,所以我们分为这四种情况
  1,2象限
  3,4象限,它的旋转只有正负0180,所以3,4象限就是负角
  显示图片的时候我们将他移动screen。blit(missiled,(x1width(x1C〔0〕),y1height2(y1C〔1〕)))
  这里的(x1width,y1height2)其实才是上图中的(x1,y1)
  所以最后我们加入相关算法代码,效果就比较完美了
  大功告成,最后附上全部的算法代码importpygame,sys
  frommathimport
  pygame。init
  font1pygame。font。SysFont(microsoftyaheimicrosoftyaheiui,23)
  textcfont1。render(,True,(250,0,0))
  screenpygame。display。setmode((800,700),0,32)
  missilepygame。image。load(elementrect1。png)。convertalpha
  heightmissile。getheight
  widthmissile。getwidth
  pygame。mouse。setvisible(0)
  x1,y1100,600导弹的初始发射位置
  velocity800导弹速度
  time11000每个时间片的长度
  clockpygame。time。Clock
  A
  B
  C
  whileTrue:
  foreventinpygame。event。get:
  ifevent。typepygame。QUIT:
  sys。exit
  clock。tick(300)
  x,ypygame。mouse。getpos获取鼠标位置,鼠标就是需要打击的目标
  distancesqrt(pow(x1x,2)pow(y1y,2))两点距离公式
  sectionvelocitytime每个时间片需要移动的距离
  sina(y1y)distance
  cosa(xx1)distance
  angleatan2(yy1,xx1)两点间线段的弧度值
  fangledegrees(angle)弧度转角度
  x1,y1(x1sectioncosa,y1sectionsina)
  missiledpygame。transform。rotate(missile,(fangle))
  if0fangle90:
  A(widthcosax1width,y1height2)
  B(A〔0〕heightsina,A〔1〕heightcosa)
  if90fangle180:
  A(x1width,y1height2height(cosa))
  B(x1widthheightsina,y1height2)
  if90fangle0:
  A(x1widthmissiled。getwidth,y1height2missiled。getheightheightcosa)
  B(A〔0〕heightsina,y1height2missiled。getheight)
  if180fangle90:
  A(x1widthheightsina,y1height2missiled。getheight)
  B(x1width,A〔1〕heightcosa)
  C((A〔0〕B〔0〕)2,(A〔1〕B〔1〕)2)
  screen。fill((0,0,0))
  screen。blit(missiled,(x1width(x1C〔0〕),y1height2(y1C〔1〕)))
  screen。blit(textc,(x,y))鼠标用一个红色代替
  pygame。display。update
  以上便是用Python模拟导弹自动追踪的代码实例。

分析为何王曼昱和林高远均03出局,梁靖崑也遭非洲一哥暴击与新加坡WTT世界杯首个比赛日,国乒五位球员出战全部轻松晋级不同,第二个比赛日,可以说对国乒团队来说是一大打击,在白天进行的第一轮比赛的剩余几场对决当中,国乒的四位出战球员,只……地球真的出问题了?最新研究地球正在变得越来越暗,反照率下降一项发表在美国地球物理联合会杂志《地球物理研究快报》上的新研究显示,地球正在变得越来越暗。这个研究里面的全球变暗不是单一方向从地面抬头看天空变暗了,更不是指太阳变暗了,而……DesktopHealth推出Einstein新系列牙科3D2022年2月10日,据资源库获悉,DesktopMetal旗下子公司DesktopHealth宣布推出一系列用于牙科应用的新产品Einstein系列。DesktopHe……人类来自火星文明?随着人类不断的探索宇宙,越来越发现自己知道或者理解的东西少之甚少,科学的尽头是玄学这样的舆论也丰满了人类的内心。火星的质量与运行轨道,公转自转周期与地球最为相似。人们开始……小老鼠VR冒险游戏莫斯2确定明年初发售VR动作冒险游戏《莫斯2》将于2022年春季登陆PSVR平台,该游戏的开发商Polyarc今天(12月3日)对外公开了上述消息。考虑到索尼方面已经公开了新一代的PSVR设……扫黑剧对决真凶到底是谁?3人有嫌疑,刘震儿子可能性最大萝卜青菜各有所爱。小编我天生就喜欢悬疑剧。《风起陇西》之后,正愁没剧看的我遇到了《对决》,那自然是追剧停不下来。目前,该剧已经更新到第8集,最新的剧情中,孙磊……无处不在的慢性炎症!抗炎饮食到底要怎么吃?免疫力就是竞争力,疫情让更多人空前关注健康,掀起一股全民养生的热情,慢性炎症、抗炎饮食等概念很应景的火了起来,慢性炎症到底是啥?抗炎饮食该怎么吃?01什么是慢性炎症?……半月谈丨妈宝男背后站了个儿宝妈妈宝男背后站了个儿宝妈半月谈记者段菁菁当有关妈宝男现象的讨论愈演愈烈,人们会不自觉地关注到与之存在依赖与共生关系的儿宝妈。二者之所以为社会所关注,是因为这种不健康的……冬奥会奖牌发布!冬奥币尺寸大,实物美!电脑App预约入口来了北京2008年奥运会奖牌金镶玉,已经成为奥林匹克史上的经典。日前,北京2022冬奥会奖牌同心也公布了。冬奥会奖牌同心发布北京2022年冬奥会奖牌由圆环加圆心构成牌体……老师家访,应该怎么和老师沟通?家长做到这两点,家校合作更默契如果老师到家里进行家访,家长跟老师进行沟通时要注意这两点,分别是跟老师如实反映孩子的情况、对老师的来访表示充分的尊重。跟老师如实反映孩子的情况老师进行家访的主要目的之一是……最适合我国居民的膳食指南来了,八条准则希望你能时刻遵守保健康民以食为天,可最适合中国人的饮食到底是什么样的?与2016版《中国居民膳食指南》相比,2022版也就是最新版的膳食指南,根据当下人们的身体健康情况做了相应的调整,从中需要大家记……现在有哪些旧习俗应该丢去?1:有些地方为了预防宝宝以后变成罗圈腿,在宝宝刚出生就会给宝宝绑腿。而近些年也频频出现宝宝肌肉过紧,甚至骨骼变形的情况,都是由于绑腿这种恶习造成的。给宝宝绑腿不仅不能预防罗圈腿……
三星高管解释了为什么折叠手机对三星的业务如此重要三星移动业务负责人卢泰文(RohTaemoon)最近向媒体解释了为什么折叠手机对三星公司的业务如此重要。卢泰文在报告中表示,三星的可折叠手机吸引力是三星常规GalaxyS……40岁王鸥美爆了,穿红色西装配黑色蕾丝打底,涂红唇烫卷发太惊如今的西装在女性这里还是蛮受欢迎了,款式丰富不说,还能塑造出很多风格,可盐可甜的画风,可以说很讨大家的喜欢,因此很多女性也是时常那西装来凹造型,尽显时尚魅力,通过衣品的穿搭来达……做裁判不能太马宁马宁作为中超联赛的知名裁判,据说还要代表中国去吹罚卡塔尔世界杯,可以说是中国足球的一张名片,但就是这一张耀眼的名片,让他他在国内各级联赛吹罚时充满了争议。这货给大多数人的印象是……欧洲各大联赛30位最具潜力的超级新星,谁将成为梅罗的接班人?今年的金球奖前五候选名单中没有了梅西和C罗的名字,意味着梅罗统治的时代已经落下帷幕。新一代年轻的球员开始崭露头角,谁将成为传奇人物莱昂内尔梅西和克里斯蒂亚诺罗纳尔多的继任者呢?……你同意吗?黄健翔姆巴佩技术糙,很多进球简直就是跑进去的直播吧8月19日讯近期姆巴佩的情况引发外界关注,黄健翔在谈到这名球员时表示,姆巴佩是个技术很糙的球员,很多进球都是跑进去的。在谈到上轮法甲姆巴佩罚丢的点球时,黄健翔认为:……电脑资讯联想小新Pro162022上市5月11日晚,预热许久的联想小新Pro162022款正式发布,首推酷睿版,配置为12代酷睿i512500H、16GB内存、512GB固态硬盘、2。5K分辨率120Hz高刷显示屏……岁月改变不了他的容貌,特斯拉可以郭德纲或成为最大赢家这难道有什么不对的吗?同样好奇,有没有女生可以解释一下导演还是拍的太保守了看样子味道应该不会差,老板配方能不能告诉一下看到这个……保持健康生活,少吃这几种食物从客观角度来说,食物的确能够为人体器官提供所需要的营养物质,进而维持生理运转,但前提是正确饮食,可是生活中很多人并不了解饮食的禁忌。剩饭剩菜秉承着勤俭节约的传统美德……薯片吃多了会怎么样?烘焙食品和薯片的问题在于它们经常包含过量的糖、盐和脂肪,以提高风味商数。这通常会导致体内脂肪大量堆积,并使人容易患上代谢综合征,其特征是高胆固醇、糖水平高于正常水平、患肝硬化甚……脾虚的孩子,疾病尾巴,不要踩这些坑同一个孩子,在不同时间,身体状态是完全不同的,这一点我们一定要记得。体质好和体质差的孩子,面对同一种情况,处理方式是不同的。特别是面对疾病的尾巴,剩下一点咳嗽声,体……加仓茅台!万亿巨头出手中国基金报格林日前贵州茅台发布了三季报显示,单季度看,贵州茅台三季度实现营业收入295。43亿元,同比增长15。61;归属于上市公司股东的净利润146。06亿元,同比增长……三巨头742014!大胜篮网22分!西部还藏着这么强的球队啊北京时间10月20日,篮网主场迎战鹈鹕,两队新赛季首战!篮网方面,等了好久终于等到今天,杜兰特、欧文、西蒙斯三巨头正式在常规赛合体了。今日球队派出先发:小帅、神仙、西帝、新援罗……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网