VC6.0 MFC 模拟弹簧运动(改进版)
VC6.0 MFC 模拟弹簧运动(改进版)
一、内容描述
运用VC6.0新建工程MFC AppWizard(exe),创建单文档应用程序,画一个弹簧(用矩形代替),下面挂有重物(用圆代替),设定重物质量和弹簧的弹性系数,模拟弹簧运动,可通过设置对话框来改变弹簧的一些基本参数,并实时绘制运动轨迹曲线图。
**源码链接:https://download.csdn.net/download/qq_46649692/16587973**
二、最终实现效果图
三、实现步骤(详细教程)
1、新建一个工程,取名“SpringSimulation”。
2、选择“单文档(S)”,点击“完成”,“确定”。
3、新建一个类
4、添加成员变量
5、构造函数里对变量初始化
代码如下
CTanHuang::CTanHuang()
{m_YD.x = 200;m_YD.y = 50;m_kx = 200/0.2;m_ky = -200/0.2;m_K = 10.0;m_L = 0.2;m_l = 0.2;m_m = 0.1;m_Nv = 0;m_Nl = 0;m_v = 0.0;
}
6、添加成员函数Draw(CDC *p)
代码如下
void CTanHuang::Draw(CDC *p)
{pDC = p;int i;int x,y,x1,y1;int r = 20;//画最上面悬挂弹簧的线x = m_YD.x - 50;y = m_YD.y;pDC->MoveTo(x,y);x = m_YD.x + 50;pDC->LineTo(x,y);x = m_YD.x;y = m_YD.y;pDC->MoveTo(x,y);y = m_YD.y + 30;pDC->LineTo(x,y);//画弹簧x = m_YD.x - 20;x1 = m_YD.x + 20;y1 = y - m_l * m_ky;pDC->Rectangle(x,y,x1,y1);//画弹簧与重物之间的线x = m_YD.x;y = y1;pDC->MoveTo(x,y);y += 20;pDC->LineTo(x,y);//画重物y += r;pDC->Ellipse(x-r,y-r,x+r,y+r);//画曲线坐标轴x = m_YD.x + 200;y = m_YD.y;pDC->MoveTo(x,y);y += 300;pDC->LineTo(x,y);x += 300;pDC->LineTo(x,y);//画曲线x = m_YD.x + 200;y = m_YD.y + 300;pDC->MoveTo(x,y);for(i = 0; i < m_Nl; i++){ x = m_YD.x + 200 + 3 * i;y = m_YD.y + 300 + m_nl[i] * m_ky;pDC->LineTo(x,y); }//计算弹簧长度m_nl[m_Nl] = m_l - m_L;m_Nl++;
}
7、添加成员函数Move(float DeltaT)
代码如下
void CTanHuang::Move(float DeltaT)
{float f,a,zn;zn = 0.1 * fabs(m_v) * m_v;//记得嵌入#include "math.h"头文件f = (m_l - m_L) * m_K - 9.8 * m_m - zn;a = f/m_m;m_v += a * DeltaT;m_v *= 0.9;m_l -= m_v * DeltaT;
}
8、设置菜单
鼠标单击“开始”,鼠标右击,选择“建立类向导…”,如下图所示。(“暂停”、“设置”操作同“开始”)
9、添加窗口消息句柄
10、引入#include "TanHuang.h"头文件
11、在OnTimer里调用
void CSpringSimulationView::OnTimer(UINT nIDEvent)
{// TODO: Add your message handler code here and/or call defaultm_TanHuang.Move(0.1);Invalidate(TRUE);CView::OnTimer(nIDEvent);
}
12、在OnDraw里调用
void CSpringSimulationView::OnDraw(CDC* pDC)
{CSpringSimulationDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data herem_TanHuang.Draw(pDC);
}
13、在OnMStartSpring(),OnMPauseSpring() 里调用时钟函数
void CSpringSimulationView::OnMStartSpring()
{// TODO: Add your command handler code hereSetTimer(1,100,NULL);
}void CSpringSimulationView::OnMPauseSpring()
{// TODO: Add your command handler code hereKillTimer(1);
}
14、编译运行初步效果图
15、新建对话框,设置弹簧参数
16、编辑对话框
17、建立类向导
18、添加成员变量
19、在OnMSetSpring()里传递对话框参数
代码如下
void CSpringSimulationView::OnMSetSpring()
{// TODO: Add your command handler code hereCDlg_Set_Spring dlg;//记得引入#include "Dlg_Set_Spring.h"头文件dlg.m_YD_X = m_TanHuang.m_YD.x;dlg.m_YD_Y = m_TanHuang.m_YD.y;dlg.m_L = m_TanHuang.m_L;dlg.m_K = m_TanHuang.m_K;dlg.m_m = m_TanHuang.m_m;dlg.m_v = m_TanHuang.m_v;UpdateData(FALSE);if (dlg.DoModal() == IDOK){m_TanHuang.m_YD.x = dlg.m_YD_X;m_TanHuang.m_YD.y = dlg.m_YD_Y;m_TanHuang.m_L = dlg.m_L;m_TanHuang.m_K = dlg.m_K;m_TanHuang.m_m = dlg.m_m;m_TanHuang.m_v = dlg.m_v;Invalidate(TRUE);}
}
20、最终效果
可以通过对话框来设置一些基本参数。
VC6.0 MFC 模拟弹簧运动(改进版)相关推荐
- vc6.0 mfc一些函数明明调用语法正确,但是提示函数或者函数参数未定义等问题解决方法。
使用vc6.0 mfc 编写程序时一些函数在正常声明.调用的情况下提示函数参数未定义等问题时 如调用EnumDisplayMonitors()会提示下面问题 运行后,出现以下问题: Compiling ...
- VC6.0 MFC 列表框 列表控件 添加 修改 删除
VC6.0 MFC 列表框 列表控件 添加 修改 删除 写在前面:列表框是很常用,并且很重要的一个控件,那么接下来,就跟随我的脚步,去探索它的奥秘吧! 一.未卜先知 1.编译运行后,点击"学 ...
- VC6.0 MFC 时钟运动 调用对话框设置时间
时钟运动 源码下载链接(免费) 问题描述 在VC6.0的MFC中画一个钟表,有时针.分针.秒针,并实现时针.分针.秒针的运动. 最终部分静态效果图如下: 操作详细过程 1.新建 1.打开VC6.0,点 ...
- VC6.0 MFC 单文档 机器人巡检
机器人巡检 一.整体框架 主要包括三个类:场景类(CChangJing):机器人类(小车(CCar).无人机(CWuRenJi)):煤气泄露类(CMeiQiXieLou). 二.场景类 目标主要是数据 ...
- VC6.0++ MFC多线程运行
Windows中没有多进程的概念,只有多线程. 在MFC中一般使用AfxBeginThread来启动工作者线程,用新建类,然后new这个类后调用CreateThread方法来启动界面线程. 工作者线程 ...
- VC6.0 MFC 单文档 五子棋游戏 基础入门
五子棋游戏 一.整体思路 1.目的:通过五子棋,掌握面向对象的思想,这是我们的目的.提升分析问题.解决问题的能力,在做项目之前要有一个系统的思路,第一步干什么,第二步干什么-- 2.思路:拿到这个问题 ...
- VC6.0读取Excel文件数据
VC6.0读取Excel文件数据 文件存储在Excel文件中,因此第一步是能够在程序中方便地读取表格数据,这里用的是VC6.0 MFC.文章内容仅供参考,程序不完整. 完整的VC6.0相关程序,需要的 ...
- VC6.0编写BHO #error : WINDOWS.H already included. MFC apps must not #include windows.h
VC6.0编写BHO #error : WINDOWS.H already included. MFC apps must not #include <windows.h> 在StdA ...
- 在MFC中如何自定义消息及相应事件(VC6.0及VS2005)
在MFC中如何自定义消息及相应事件(VC6.0及VS2005) 2012-01-01 16:42:18| 分类: VS2005&VC++ | 标签:自定义消息 message |字号 ...
最新文章
- 基于Hash的消息认证码HMAC简介及在OpenSSL中使用举例
- oracle crs 不能启动,oracle 10g crs 不能启动问题解决案例
- python判断字符大小写转换_Python 字符串大小写转换的简单实例
- C# 使用Timer控件设置时间间隔
- 12对胸椎对应体表标志_铁路信号之信号表示器及标志(三)
- easyUI 运用窗口和form表单制作导出功能
- 叉叉框架_叉/连接框架
- 修改NavigationBar的分根线颜色
- Postgresql时间处理
- mysql数据库访问组件_mysql数据库访问组件
- 集群节点数和分片数关系_Elasticsearch最佳实践之分片使用优化
- Jsoup解析网页html
- 阶段3 2.Spring_03.Spring的 IOC 和 DI_9 spring的依赖注入
- Excel曲线拟合的精度问题
- git使用vimdiff模式比对代码
- OutMan——Foundation框架中的集合类(一)(二)
- 如何在新浪微博中批量取消关注
- ping 命令的实现
- hihocoder买零食
- Html上传文件php处理上传文件