# PhysicalDemo **Repository Path**: study__hard/physical-demo ## Basic Information - **Project Name**: PhysicalDemo - **Description**: 带电粒子在电磁场中运动的仿真实验 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-07-22 - **Last Updated**: 2024-03-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 物理仿真软件开发文档 ### 需求文档 #### 产品介绍 该产品是一个模拟粒子在电磁场中运动的仿真软件。用户可以通过面板设置相关参数,来观察粒子运动轨迹和相关数据。既可以便于老师教学,又可以激发学生学习兴趣。 #### 详细功能 - 切换场景:用户可以点击工具栏相应的按钮,切换粒子至不同场景 - 参数设置:通过UI界面设计出输入面板(粒子参数设置,电场参数设置,磁场参数设置) - 绘制轨迹:点击开始演示按钮后,绘图区获取到设置面板设置的参数定时绘制粒子相应的轨迹,并能通过鼠标监控粒子坐标 - 显示数据:点击开始演示按钮后,图表区获取到设置面板设置的参数定时在图表上相应显示粒子的状态数据 - 定时机制:通过定时器的打开与关闭,来实时控制绘图区的粒子是否运动,图表区的数据是否更新 ### 功能流程图 ![输入图片说明](https://foruda.gitee.com/images/1667138206149696122/59c31a7f_9677444.png "PhysicalDemo功能流程图.png") - 该流程图以电场场景为例(其他两个场景类似),展示出用户的操作逻辑,以便于开发 - 解释说明: - 在任何情况下都能点击工具栏的退出按钮 - 程序默认进入电场场景,当再次点击电场场景按钮,提示已在电场场景,此时只能切换其他两个场景中。当切换到其他场景中后,绘图区轨迹清空,图表数据清空,此时只能点击工具栏的开始演示按钮和退出按钮,否则弹出提示框 - 在点击开始演示按钮后,绘图区开始绘制,图表区开始更新,此时不能点击继续演示按钮,否则弹出提示框 - 只有在点击开始演示按钮后,才能点击暂停演示按钮,否则弹出提示框 - 只有在点击暂停演示按钮后,才能点击继续演示按钮,否则弹出提示框 - 点击重新演示按钮后,不能点击暂停演示和继续演示按钮,否则弹出提示框 ### 功能架构图 ![输入图片说明](https://foruda.gitee.com/images/1667138296300575918/d756d4a6_9677444.png "PhysicalDemo功能架构图.png") ### UI界面结构图 ![输入图片说明](https://foruda.gitee.com/images/1667138253232568104/5ef32dcc_9677444.png "UI界面设计.png") **该UI设计可通过双击MainWindow.ui文件查看布局和层次结构** ### 类功能说明 - ``` MainWindow类:主界面类,内涵指向ui界面的指针,ui界面所有的组件,都通过其ui指针获取。控制着整个代码的逻辑 ``` - ``` EleScence类:电场场景类,添加到tabWidget中,本质是一个widget。维护着在电场场景中粒子轨迹的控制 ``` - ``` MagScence和EleAndMagScence类结构与EleScence类类似不在说明 ``` - ``` XYAxis类:笛卡尔坐标轴,可以把坐标值转换成坐标像素,可以把坐标像素值转换成坐标值,别人封装的 ``` - ``` MyChartOne类与MyChartTWo类结构类似:分别维护着各自图表的坐标轴设置,数据等信息,需要添加到QChartView对象中才能显示 ``` ### 主要任务 - 任务一:工具栏的connect连接,当违法点击工具栏时显示提示窗口,以及其他connect连接 - 思路:结构上文中功能流程图下面的解释说明书写 - 难点:接口比较繁杂 - 任务二:根据设置面板设置的参数,绘制粒子轨迹 - 思路:连接定时器,当时间到了,根据时间间隔计算粒子坐标,重绘tabWidget的绘图区 - 难点:由于paintEvent的特性,绘制较易出bug - 任务三:根据设置面板设置的参数,更新图表数据 - 思路:连接定时器,当时间到了,计算出数据,把数据吐给QChart,在图表中显示出数据 - 难点:如果用曲线图显示数据,同样面临开始的问题,时间不可能无限短,那么数据可能不准确,并且实时更新图表不易 - 任务四:确定各个参数设置范围和绘图区大小,封装各个场景的物理公式,以供绘图和更新图表使用 - 思路:结合物理公式,确定各个参数和绘图区的合适范围 - 任务五:为设置面板设置默认值,并封装获取面板设置值的函数,以供绘图和更新图表使用 - 思路:通过mainwindow的构造函数用ui指针获取到相应的输入框,为其设置默认值,并封装获取面板设置值的函数 - 任务六:设置工具栏按钮图标,以及主程序图标 - 思路:~~~ ### 不足与待实现 - 不足 - 绘图区过于单一,如果绘图区背景为网格,相应的场景信息没有较好的反应 - 图表区如果用曲线显示数据,可能有误差 - 待实现 - 在左下角空白区,增加设置参数后绘制粒子受力分析功能,来显示相应的场景信息 - 增加其他示例功能