小球撞击试实验报告
小球撞击试验报告
试验目的:实现两个质量,速度不同的小球碰撞的物理过程。
试验要求:可以任意输入两小球的速度和质量。
试验实现过程:
首先要有两个不同的小球,分别命名为小球A,小球B,通过画图软件画两个不同颜色的立体小球。其格式为.bmp。通过VC++的位图引入加载到资源当中。
小球引入到资源后,就该实现两球的碰撞。第一个要问题是怎样把引入的小球在窗口中显示。通过classwizard在视图类加载消息响应函数oncreat,创建一个窗口,用位图显示的语句使小球在窗口中显示。小球在窗口显示之后就该让小球动起来。小球的运动本质上是通过时间让小球的坐标不断的改变。这就该想到用classwizard在视图类添加消息响应函数timer,通过制定一个时间定时器调用时间函数timer。这步做好之后,就该考虑怎样实现小球碰撞的物理过程,利用物理公式来实现这个过程。然后添加背景图片。
代码如下:
声明视图类变量。
public:
double mass_1,mass_2;
double v1,v2;
double m_ptpos1_x,m_ptpos1_y,m_ptpos2_x,m_ptpos2_y;
CBitmap m_Bitmap,m_Bitmap1,m_Bitmap2;
double n_FrameWidth,n_FrameWidth1,n_FrameWidth2;
double n_FrameHeight,n_FrameHeight1,n_FrameHeight2;
int i;
CBrush m_BKBrush;
2添加资源。
3.初始化函数。
mass_1=0;
mass_2=0;
v1=0;
v2=0;
i=0;
CBitmap *pBitmap=new CBitmap;
ASSERT(pBitmap);
pBitmap->LoadBitmap(IDB_BITMAP4);
m_BKBrush.CreatePatternBrush(pBitmap);
delete pBitmap;
4. 添加消息响应函数OnCreate。
CRect rect;
GetClientRect(&rect);
CXiaoQiudialog dlg;
m_Bitmap2.LoadBitmap(IDB_BITMAP3);
m_Bitmap.LoadBitmap(IDB_BITMAP1);
m_Bitmap1.LoadBitmap(IDB_BITMAP2);
BITMAP bm,bm1,bm2;
m_Bitmap2.GetBitmap(&bm2);
n_FrameHeight2=bm2.bmHeight;
n_FrameWidth2=bm2.bmWidth;
m_Bitmap1.GetBitmap(&bm1);
n_FrameHeight1=bm1.bmHeight;
n_FrameWidth1=bm1.bmWidth;
m_Bitmap.GetBitmap(&bm);
n_FrameWidth=bm.bmWidth;
n_FrameHeight=bm.bmHeight;
mass_1=dlg.m_M1;
mass_2=dlg.m_M2;
v1=dlg.m_V1;
v2=dlg.m_V2;
m_ptpos1_x=0;
m_ptpos1_y=50;
m_ptpos2_x=900;
m_ptpos2_y=50;
SetTimer(1,1,NULL);
5.添加消息响应函数OnTimer。
CRect rect(m_ptpos1_x,m_ptpos1_y,m_ptpos1_x+n_FrameWidth,m_ptpos1_y+n_FrameHeight);
CRect rect3(m_ptpos2_x,m_ptpos2_y,m_ptpos2_x+n_FrameWidth1,m_ptpos2_y+n_FrameHeight1);
InvalidateRect(&rect3);
InvalidateRect(&rect);
UpdateWindow();
CString str,str1;
CStatusBar *pstatus=(CStatusBar*)AfxGetApp()->m_pMainWnd->GetDescendantWindow(ID_VIEW_STATUS_BAR);
if (pstatus)
{
str1.Format("小球A的质量:%f,小球B的质量:%f",mass_1,mass_2);
str.Format("速度:v1=%f:v2=%f",v1,v2);
pstatus->SetPaneText(