神级程序员教你用Python实现简单的导弹自动追踪!此乃装逼神技!
由于待会要用pygame演示,他的坐标系是y轴向下,所以这里我们也用y向下的坐标系。在这里还是要推荐下我自己建的Python开发学习群:483546416,群里都是学Python开发的,如果你正在学习Python ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2018最新的Python进阶资料和高级开发教程,欢迎进阶中和进想深入Python的小伙伴
计算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象限就是负角
显示图片的时候我们将他移动screen.blit(missiled,(x1-width+(x1-C[0]),y1-height/2+(y1-C[1])))这里的(x1-width,y1-height/2)其实才是上图中的(x1,y1)所以最后我们加入相关算法代码,效果就比较完美了
大功告成,最后附上全部的算法代码
由于待会要用pygame演示,他的坐标系是y轴向下,所以这里我们也用y向下的坐标系。在这里还是要推荐下我自己建的Python开发学习群:483546416,群里都是学Python开发的,如果你正在学习Python ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2018最新的Python进阶资料和高级开发教程,欢迎进阶中和进想深入Python的小伙伴
计算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象限就是负角
显示图片的时候我们将他移动screen.blit(missiled,(x1-width+(x1-C[0]),y1-height/2+(y1-C[1])))这里的(x1-width,y1-height/2)其实才是上图中的(x1,y1)所以最后我们加入相关算法代码,效果就比较完美了
大功告成,最后附上全部的算法代码
阅读更多
- Python实现微信自动回复机器人(简单)
- python简单实现服务器信息自动邮件发送
- python导弹自动追踪以及实时图片旋转算法(吕万友)
- Python包装网页微信API并实现简单自动回复
- Python简单实现自动删除目录下空文件夹的方法
- Dephi 程序输入法自动切换最简单最好用的实现方法(被程序员杂志采纳,重新详细整理)
- Windows Python IDEL编译器自动忽略'\r'及简单进度条的实现
- python中如何简单的实现decorator模式--由django admin源码所得体会
- 用AJAX实现google输入自动完成的简单模拟
- linux下简单的自适应CPU利用率的控制(Python实现)
- 用AJAX实现google输入自动完成的简单模拟
- 用AJAX实现google输入自动完成的简单模拟
- (原创)用python实现自动扫雷机
- 简单三步修改 实现Windows XP自动登录
- 用AJAX实现google输入自动完成的简单模拟
- 用AJAX实现google输入自动完成的简单模拟
- 最简单的Python singleton模式实现
- 用AJAX实现google输入自动完成的简单模拟
- 用AJAX实现google输入自动完成的简单模拟