栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++模拟疫情在校园的传播

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++模拟疫情在校园的传播

1)  思路一:地图的绘制

地图的绘制我们采用了C++图形库Easyx来实现,通过设计draw()函数来实现地图的绘制

  1. 思路二:人的设计

在设计仿真实验时,我们将学生在这里简化为质点,然后构建结构体struct movers。分别用以下的参数来设计小球的状态:

COLORREF color;       // 用小球颜色仿真学生的状态

    double x, y;          // 坐标

    double vx, vy;        // 速度

    double radius;        // 半径

int kouzhao;        //是否带口罩,1表示戴口罩,2表示不戴

  1. 思路三:初始变量的设计

我们设计了startup()函数对小球的初始状态进行了设计,小球的速度采用随机函数rand( )分别对vx,vy随机出 -1, 0, 1三个值,对小球的半径统一设计为两个像素点,初始位置设计在宿舍。

  1. 思路四:路线的规划及时间控制

在设计仿真实验中,每个学生一天的日常活动路线为:

‌宿舍→食堂→教学楼90%(实验楼10%)→食堂→宿舍→教学楼90%(实验楼10%)→食堂→教学楼70%(实验楼10%、运动场20%)→宿舍

在这里我们采用了时间变量

time_t      systimeStart, systimeEnd; // 时间

time(&systimeStart);                 // 获取初始时间

time(&systimeEnd);                       // 获取终止时间

来实现小球在固定的场所运动确定的时间。

而小球在建筑里面的运动我们分别设计了

sushe();jiaoxuelou();shiyanlou();yundong();shitang();

等函数来实现小球在建筑里的模拟运动。

小球在建筑之间的运动我们设计了move( )等函数实现,

  1.  思路五:人机交互(按钮类的设计)

我们对按钮的设计采用了Easyx中自带的ExMessage,getmessage,peekmessage函数来获取鼠标信息,同时采用Easyx自带的inboxput函数进而实现按钮的效果。

  1.  思路六:小球状态的变化

我们对小球状态的变化设计了全局变量

float NOINFECTED1 = 10;//潜伏者与未感染者均不戴口罩时的感染概率1

float NOINFECTED2 = 20;//感染者与未感染者均不佩戴口罩是的感染概率2

float YNINFECTED1 = 5;//潜伏者戴口罩,未感染者不戴口罩5

float YNINFEVTED2 = 1;//感染者戴口罩,未感染者不戴口罩6

float YESINFECTED1 = YNINFECTED1 / 2;//潜伏者与未感染者都戴口罩时的感染概率3

float YESINFECTED2 = YNINFEVTED2 / 2;//感染者与未感染者都戴口罩时的感染概率4

float NYINFECTED1 = NOINFECTED1 / 2;//未感染者佩戴口罩,潜伏者不戴口罩7

float NYINFECTED2 = NOINFECTED2 / 2;//未感染者佩戴口罩,感染者未戴口罩8

来实现对小球在不同的情况下感染概率输入

propability( )函数来选择概率,colourchange()函数实现小球状态的变化。在colourchange()中我们设计了time_t timey[t]分别记录每个小球状态变化的时间,从而实现对每个小球状态变化时间的记录,进而确定小球在确定的时间内实现状态的转换。

  1. 思路七:对每个状态小球的记录

对每个小球状态的记录我们设计了全局变量count1,count3,count5分别记录无症状感染者,确诊患者,累计治愈人次的记录,count4[ ]数组来实现对前一天核酸阳性人数的记录。

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/928039.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号