[编译原理课设] 自动机的状态转换图表示

课程设计的要求

  • 要求设计一个具有绘图功能的程序,可以手工以状态转换图的方式绘制自动机;
  • 图形化的自动机可以保存,读取;
  • 根据状态转换图得出自动机的状态转换矩阵;
  • 根据状态转换矩阵,自动绘制出状态转换图。

开发环境

  • Manjaro Linux(内核版本5.9.11)操作系统
  • Qt Creator 4.13.3
  • QMake版本为 3.1,GCC版本为10.2.0

概要设计

打开软件,通过侧边栏选择模式,可选模式有五种,分别是移动,添加点,添加边,删除,修改,通过鼠标点击切换想用的模式。各模式功能如下:

  • 移动:鼠标单击图上的点(对应状态),长按不松手,移动鼠标,点会跟随鼠标移动,与之相连的边自动调整。
  • 添加点:在图中一个位置单击鼠标,弹出提示框,输入点名称(状态名)及是否是初态/终态,点击确认后,该位置新增一个点。
  • 添加边:连续点击两个点A,B,弹窗提示输入边的信息(输入符号),点击确认后增加一条边,A,B可以是同一个点,添加自环。
  • 删除:鼠标点击边则删除边,点击点则删除点和与它相连的所有边。
  • 修改:鼠标点击边或者点,弹出对应添加状态中出现的弹窗,在弹窗中修改信息即可。

按键功能:

  • 减号:缩小图形
  • 加号或等号(一般键盘上加号与等号在同一个按键上):放大图形
  • 空格:随机打乱点的位置
  • 鼠标滚轮:也可以放大缩小图形

自动调整:

  • 此功能可以自动调整点的位置,使图形比较自然,实现方法参考了Qt的官方文档中的Elastic Nodes Example,核心算法是每个点间有斥力,与点到点的距离平方成正比,边有拉力,与边长的平方成正比。设置定时器,每隔一段时间计算每个点的受力情况,更新点的位置,当受力平衡时,图是舒展开的,较美观。
  • 自定义实现了继承QGraphicsItem的Node类和Edge类,其中保存了点/边信息,比如点的名字,位置,边的起点,终点,注释(输入符号)等,并实现了绘制等相关功能。继承QGraphicsView的GraphWidget实现了对Node和Edge的管理,大部分交互响应(比如按键功能,添加点/边等)也是它实现的。

系统的类图

画出系统的所包括的所有类及类之间的关系图。

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值