2020-09-14QT写一个简单的元胞自动机(3)

目录

  1. 需求分析
  2. 需求设计
  3. ui设计

1. 需求分析

整体目标:写一个简单的NS模型
场景:一个周期性的直通道(右端出,左端进),多辆车按一个简化版的NS模型,在正中间运动,示意图如下

image.png

简化版的NS模型
1.加速:有加速的趋势,且不会超过最大速度
2.减速:车辆前方距离不够时,车辆要减速来避免相撞。
3.更新:车辆根据其速度进行运动
公式化一下:设加速度a=1 Cell/(T^2),其中Cell代表一个元胞的尺寸(此处不妨假设为0.4m),T代表更新的时间步长(假设为0.4s)
1.加速:t时刻的期望期望速度V=V(t)+a,
2.减速:车的最终速度V(t+T)=min(Vmax,V,D/a),三者(车的最大速度,车的期望速度,场景可允许速度)之间取最小,D是车前可用空间,车的最大速度设为5个格子每时间步长。
3.更新:t+T时刻的位置,X(t+T)=X(t)+V


2. 需求设计

1.信息的存储:对每个车需要进行车的数据记录(速度,位置),可以定义一个车的类MyVehicle
2.场景的初始化(用按钮控制):初始化车的位置和速度,并绘图

  1. 场景的更新:采用随机更新的方式,调用更新函数后,绘图。

3.ui界面的设计

3.1 主窗口的规划
假设通道100个格子长,10个格子宽,每个格子10像素的话。至少要1000X100,考虑到控件以及空间的预留,选中后如下进行设置。


最大最小尺寸相等,以保证不会被拉伸和缩放

先考虑程序控制按钮和车辆数量输入框的布局,依次拖入,大致排成一排,如下图所示,其中控件的文本显示通过双击修改。


image.png

然后通过布局使窗口更好看。
加入三个水平弹簧,全选中后,点击水平布局
image.png

拖入垂直布局盒并加入垂直弹簧,用来给出结果图的空间。


image.png

点击主窗口widget,选择垂直布局,
image.png

运行,看看。(可以对组件改名,方便引用)
还行的布局

3.2 按钮的槽函数
由于是对按钮进行点击,来跑模型,所以需要给按钮写响应点击的函数。分别对三个按钮右键,转到槽,选择click槽函数,让QT自动帮你生成按钮对应的响应函数

image.png

cpp文件对应的槽函数

槽函数需要实现不同的功能,开始按钮点击要开始模拟模型,暂停是暂停计时器函数(先不考虑),结束是关闭窗口。
处于方便观查,补加上一个“确认按钮”(btnOk),观察初始化的场景,如下图
补加按钮

这样槽函数内先调用几个没有实现的空函数,其中关于计时器的后面会提到。
槽函数的简单填写

现在的效果:
点击结束按钮会结束

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。