大数据 爬虫Python AI SqlPython小哥哥

用python模拟飞机进近过程中鸟类动态活动分布 !

2019-03-27  本文已影响0人  14e61d025165

引言

今年年初,英国BBC新闻网发起“20世纪最伟大人物”评选,中国首位诺贝尔生理学或医学奖得主,我们敬爱的屠呦呦屠奶奶就是候选人之一。在后来公众投票中,可谓各路神仙齐聚,最后决赛的名单,包括马丁·路德·金、纳尔逊·曼德拉、欧内斯特·沙克尔顿、戴维·鲍伊、穆罕默德·阿里还有巴勃罗·毕加索。然而还是有一位伟人超越了他们,被命名为“20世纪最伟大的人物”,他就是计算机科学之父——阿兰·图灵(Alan Turning)。别的伟人给人类以信仰,以图灵为代表的计算机科学家,给人类的则是未来。
Python学习群:683380553,有大牛答疑,有资源共享!是一个非常不错的交流基地!欢迎喜欢Python的小伙伴!


image image

话题和标题扯得有点远,图灵也好,信息论创始人香农(Shannon)也好,今天的主角python的创始人吉多(Guido)也好,其实他们离我我们真的不远。既然同处一个时代,同样是兴趣使然,虽然难以望其项背,但是用先进的手段做一些好玩的东西,甚至用Nature、Science常用的数学手段分析一点日常的东西自娱,还是有可能的。世上无难事,只要肯登攀。

image image

私信2小编001 获取所有代码以及素材!

有句话叫Talk is cheap,show me the code这里也不过多的宣传数字化思维的作用了,我们直接进入正题,let's go~

image

目标

机场驱鸟的重要性这里不予赘述,因为会静下心看这篇东西的人必然是核心技术人员,都懂的比我更深。我们平时制作的鸟类活动分布图,基本是在特定的区域里绘制鸟类表示此区域有该鸟种分布,由于图的静态限制,除了认识这种鸟的照片外作用微乎其微。本次目标分两个,一是制作辖区动态鸟类分布图,用动态的方式展现出特定的鸟种活动区域,并将移动速度,体型,危害程度等作为属性参数予以体现,由于篇幅限制此图仅展示原理;另外一个是制作模拟鸟类在飞机进近过程中出现的过程,把特定区域的高危鸟种罗列出来,以动态形式展现,同时将进近中的飞机变为可操作对象,直观展示应对鸟击所适宜采取的措施,我将展示最终成果效果图。

环境

计算机环境相对简单,需要自行安装python3.0,python作为人工智能时代的编程语言,可以说是未来很多工作数字化的最佳基础。本次编码后来采用的geany编译器。

之后pip install pygame,兴趣使然所以使用的pygame平台(我才不会说是因为matplotlib我还没彻底熟悉呢,另外动态过程pygame真的方便)。

素材

图片素材包括鸟类素材,飞机素材,背景素材。因为作者人在内蒙,本文就以当地常见的斑翅山鹑,小沙百灵,云雀三个鸟种为例,其他的种类原理相同可以自行添加。飞机素材网上一大把,ps抠图就是了。背景素材嘛,就地取材拍一张了。

素材样例

image image image

image

详细代码段

image

首先是导入和预设,防中文汉字乱码或者报警,所以采用gbk编码。然后初始化pygame。

coding=gbk

导入pygame

import pygame

import random

导入pygame坐标系

from pygame.locals import *

初始化pygame

pygame.init()

image

既然直观展示,我们需要一个可以交互的界面,生成一个1500×1000像素的界面。

screen = pygame.display.set_mode((1500, 1000))

image

下面需要导入飞机和鸟类模型,生动一点的话,还应该导入动态的云彩,于是定义相应的类。首先是飞机主体。

image

飞机有两种行为,一种是由人手动操控,一种是按照既定路线(PS:我在某机场看到管制员再玻璃窗上绘制了飞机进近的参考线,很有意思)降落至跑道上平飞。我们在定义过程中加入操控部分。

image

为了防止飞机飞出屏幕,适当做个保护吧

image

飞机定义好了,开始定义上鸟类,首先是斑翅山鹑种,也就是沙斑鸡,飞行高度较低,喜欢跑动,所以生成点高度设定的也低。具体如下:

image

同理,定义小沙百灵和云雀,注意根据习性不同设置了不同的分布参数。

image image

为了更有真实感,我们还设定了动态的云朵,出现方式类似,只是调整了频率。

image image

下面把最后的预处理工作做好:

image

到此为止,所有设定工作都已完成,开启界面的主循环。我们要使在主循环过程中,可以按退出终止演示,同时也要让不同鸟种动态生成,自动更新。

image

当然,主循环过程中该自动更新生成的不能落下。

image

当发生飞机和鸟类碰撞时,即鸟击事件,为方便演示,我们定义二者的边框有重叠部分时,改变飞机的形态为hit形态,同时背景文件替换(当然,这是个人习惯,也完全可以加载一张其他提示性的png文字图片)

image

对了,还记得开头提到过的,飞机自动进近路线么,我们定义一个行为,当我按住键盘上的g键时,飞机按照既定的方向和速度进近落地,当落地至跑道平面时,飞机以既定的速度平飞。具体如下:

image

以上,我设想的一些功能都已实现,不过一旦鸟击之后,还是希望可以重新开始进行下一次演示的,我们不妨设定一下重新开始的程序吧。按空格键后,飞机要重置,背景要重置,鸟类可以不用动,继续动态演示就好了。

image

最后,加上一句pygame.display.flip(),开始运行!

实际运行效果如图(因为屏幕大,所以gif的优化不是很好,软件本身并无卡顿,另外部分功能如G键自动运行不会很好的体现出来,有兴趣可以下载代码自行测试。)

image

扩展

扩展有两个,一个是软件本身,其实我们要的是演示效果,包括鸟类的分布动态显示,这些依据机场的时机情况要好的多,所以我这里只设定了每种鸟类的平行分布。而是鸟击之后可以在背景内增加更多的分析和思考内容,所以我采用背景替换的方式,图片中虽然显示的事youlose,真正适合显示的对不同区域不同种类的鸟种的防治分析。

第二个扩展,就是开头说的,如何利用相同的思路绘制动态鸟类活动分布地图呢。其实只需要修改背景为机场周边8公里地形图或者其他mapinfo软件绘制的底图,然后重新定义鸟类的活动区域和运动速度,当超出边界时使用kill()方法消除即可。因为需要多种鸟类同时存在才有效果,故这里仅提供思路,我的32位低配电脑真跑起来还是有压力的。

上一篇下一篇

猜你喜欢

热点阅读