神级程序员教你用Python实现简单的导弹自动追踪!此乃装逼神技!

由于待会要用pygame演示,他的坐标系是y轴向下,所以这里我们也用y向下的坐标系。

计算sina和cosa,正弦对比斜,余弦邻比斜,斜边可以利用两点距离公式计算出,即:

于是

AC的长度就是导弹的速度乘以时间即 |AC|=vt,然后即可计算出AD和CD的长度,于是这一个时间片过去后,导弹应该出现在新的位置C点,他的坐标就是老的点A的x增加AD和y减去CD。

于是,新的C点坐标就是:

只要一直反复循环执行这个操作即可,好吧,为了更形象,把第一个时间片和第二个时间片放在一起看看:

很简单的代码如下:

如果仅把导弹考虑为一个质点的话,那么以上算法就已经足矣,我没有做导弹的旋转,因为一个质点也不分头尾不需要旋转,当然这前提得是你加载的导弹图片很小的时候不旋转看起来也没什么问题。但是在pygame里面做旋转并不是一件容易的事情(也可能是我无知),好吧我们先把图片替换成一张矩形的,再加入旋转函数看看效果如何

因为图片的坐标点是它的左上角的点,所以如果我们想让图片的坐标固定在箭头尖点,那么把图片实际打印位置x减少图片长度,y减少一半宽度就行。

但是实际运行效果并不好:

大致方向相同,但是图片箭头的尖点并没有一直跟随鼠标,这是为什么呢。经过我的研究(就因为这个问题没解决一直没发布),

我发现原来是这个图旋转的机制问题,我们看看旋转后的图片变成什么样了:

旋转后的图片变成了蓝色的那个范围,根据旋转角度的不同,所变成的图片大小也不一样,我们看旋转90的情况

这样,两个导弹头的点就一致了。接下来我们分析求旋转后的导弹头的算法。根据旋转角度的不同,旋转角在不同象限参数不一样,所以我们分为这四种情况

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)

所以最后我们加入相关算法代码,效果就比较完美了

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

欢迎大家加入万人交流,资源共享群::125240963

原文地址:https://www.cnblogs.com/sm123456/p/9042865.html

时间: 2024-10-28 18:47:33

神级程序员教你用Python实现简单的导弹自动追踪!此乃装逼神技!的相关文章

神级程序员教你如何用四行代码画出一幅中国地图!Python就是牛逼

前面两行引入相应的库,真正的代码就4行,够简单吧.第1行甚至可以不写,它定义了图的大小.第2行我们创建一个地图,第3行把海岸线画上,第4行显示这个地图,就是这样: 你用 Java 的 4 行代码画一个地图出来? 然后我们开始画上国家,又是1行代码: m.drawcountries(linewidth=1.5) 就变成了这样: 看上去有点变形,这是因为我们没有添加任何投影的原因, Basemap 提供 24 种不同的投影方式,你可以自己一个个试一下,比较常用的是 兰勃特投影 ,我们添加一下: m

神级程序员带来:用python有证书的加密解密实现方法!

本文实例讲述了python有证书的加密解密实现方法.分享给大家供大家参考.具体实现方法如下: 最近在做python的加解密工作,同时加完密的串能在php上能解出来,网上也找了一些靠谱的资料,刚好也有时间我就总结了一下python在加密与解密这块的代码,今后可能还能用的上.相对于php而言python这块加解密组件较多的,分别是: 一. RSA标准方式生成的证书 1.加密解密.加密签名.验证加密签名 代码如下: #encoding: utf8 import os import M2Crypto #

神级程序员巧用python开发王者荣耀把妹神器,一路升级上王者!

Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象.直译式电脑编程语言,也是一种功能强大的通用型语言,已经具有近二十年的发展历史,成熟且稳定.它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务.它的语法非常简捷和清晰,与其它大多数程序设计语言不一样,它使用缩进来定义语句. Python支持命令式程序设计.面向对象程序设计.函数式编程.面向切面编程.泛型编程多种编程范式.与Scheme.Ruby.Perl.Tcl等动态语言一样,Python具备垃圾回收

科技巨擎Google是如何构建Web框架的,神级程序员操作指南

根据谷歌对外公布的数据,它的20亿行代码都部署在同一个代码仓库里,通过基于基线的方式进行开发工作中的代码共享. 从上面这张图可以看到,一共有文件10亿个,源文件数量达到900万个,源代码行数达到20亿行,提交代码的深度可以挖掘到3500万次提交,平均每个工作日提交4万次,数字真是恐怖. 从大众的眼光来看,特别是那些谷歌公司外部的人,他们会觉得这种单一代码仓库的管理方式,尤其是代码量这么恐怖的前提下,这种管理方式很不正常,但是它真的很有效,而这种有效是由管理方式决定的,而不是单纯让它自然生长. R

老司机程序员教你用Python获取种子,源源不绝的那种!营养跟不上

种子/DHT 通过磁力就可以获取种子文件从而进行下载,这跟直接使用种子下载时一个道理的,只是少了从磁力到种子文件的一个过程而已. peer: 一个 TCP 端口上监听的客户端/服务器,它实现了 BitTorrent 协议. 节点: 一个 UDP 端口上监听的客户端/服务器,它实现了 DHT(分布式哈希表) 协议. 如果对 DHT 协议感兴趣的话一定要看下 DHT 协议 的具体内容,这里有 中文翻译版本.(想要彻底读懂项目的话一定要先了解该协议,代码都是基于该协议实现的) 然而我想自给自足获取磁力

资深程序员教你用Python如何调企业微信接口发送消息!叼的不行!

进入正题 先来几张好玩的图片 首先进入python交互界面,导入我自己写的模块,然后发一个测试消 息,"Hello,小伙伴们好!",然后看看企业号能否收到相应的消息. 那么问题来了,既然可以这么玩,那岂不可以把所有能通知的信息都可以通过python调用接口发送信息了?那当然了,可以把自己感兴趣的用爬虫爬下来,然后发给自己,也可以用于报警等信息,还可以......就看你自己怎么玩吧 上图第一行嘛,就是python解释器的绝对路径,也就是你python的安装路径,自行修改即可.第二行申明编

资深Python程序员教你统计,三国中人物名字出现的频率,很简单

资深Python程序员教你简单.有趣的程序:使用第三方库jieba切分,统计统计名著三国演义中人物名字出现次数. 资深Python程序员教你统计,三国中人物名字出现的频率,很简单其中一个jieba库是一个对中文文本依照汉字间关联概率进行词组划分的第三方库,使用简单,且非常好用 import jieba def getWords(): txt = open('novels/threekingdoms.txt', 'r', encoding = 'utf-8').read() words = jie

程序员教流浪汉编程,开发APP

panpan @ 2013.10.05 , 09:34 am 一天,Patrick McConlogue宣布他将要教一个流浪汉学Java语言,帮助他开发一个属于他自己的app.今年23岁的Patrick是一名软件工程师,每天在去上班的路上他都会遇见那个流浪汉,然后他就决定践行自己的一个主意,看看他会不会是那个人. “这个主意很简单.”Patrick在自己的网站上写道: 1.我明天再路过时给你100美元.2.我明天再路过时给你三本JavaScript教程(入门级.高级.专家级)和一台便宜的笔记本.

“深入简出”好程序员教你MapReduce全过程

欲说MapReduce,好程序员要和大家先讲一对概念——移动数据和移动计算. 在学习大数据的时候,我们便会接触移动数据和移动计算,这两种联系紧密而又有很大不同的概念,其中移动计算也叫做本地计算. 在以前的数据处理中时使用的移动数据,其实就是将需要处理的数据传输到存放不同处理数据方式逻辑的各个节点上.这样做的效率很低,特别是大数据中的数据量是很大的,至少都是GB以上,更大的是TB.PB甚至更大,而且磁盘I/O.网络I/O的效率是很低的,这样处理起来就需要很长的时间,远远不能满足我们的要求.而移动计