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

本文介绍了一个课程设计项目,旨在创建一个具有绘图功能的程序,能够手动绘制自动机的状态转换图。用户可以保存、读取图形化的自动机,根据状态图生成状态转换矩阵,反之亦然。开发环境使用了Manjaro Linux、Qt Creator等工具,程序实现了移动、添加、删除和修改状态等功能,并详细描述了各个测试用例及其结果。
摘要由CSDN通过智能技术生成

课程设计的要求

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

开发环境

  • 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类,其中保存了点/边
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值