打靶碰撞实验实验报告
通信(1)班 1140031 赵雯琳
【实验目的】
物体间的碰撞是自然界中普遍存在的现象,单摆运动和平抛运动是运动学中的基本内容,能量守恒与动量守恒是力学中重要概念,本实验研究球体的碰撞前后的单摆运动的差别上,研究实验过程中能量损失的来源,自行设计实验来分析各种损失的相对大小,从而更深入地理解力原理,提高分析问题、解决问题的能力。
【仪器用具】
碰撞打靶实验仪、米尺、物理天平等。
【实验原理】
1·碰撞:指两物体互相接触时,运动状态发生迅速变化的现象,正碰时,两物体的质心沿速度在同一方向,大小相同的两个小球发生正碰,能量不损失。即碰撞时动量守恒。
2·平抛运动:、将物体用一定的初速度沿水平方向抛出,在不计空气阻力的情况下,运动学方程为x=vt,y=1/2·gt²
3·在重力场中,质量为m的物体,被提高
距离h后,其势能增加Ep=mgh;质量为m的物体以速度v运动时,其动能为Ep=1/2·mv²
【实验步骤】
1·确定球心位置:先将载球支柱固定在导轨的最左侧,将小球放在支柱上,将立柱沿导轨移动,调整立柱的高度,使得球心的高度刚好与立柱上的零刻度线处于同一水平线上。
2·用天平测量被撞球的质量M
3·摆球用摆线固定好后,通过调节调节旋钮,使得摆球和被撞球的球心在同一高度。之后固定摆线长度。
3·上升电磁铁的高度,刻度线位于某一定值。打开仪器开关,将摆球放上电磁铁吸附,通过移动立柱在导轨上的位置来调整,使得摆线拉直。
4·按下开关,摆球被释放,被撞小球作平抛运动,砸落在靶盒上,用刻度尺测量水平位移,记录数据,并把靶点用橡皮擦去,等待下一次数据记录。
5·同一高度,重复四次实验。记录四组数据。
6·换五组不同的高度,重复以上步骤,最后共得20组数据。
【实验数据】
1·小球质量m=32.80g
2·被撞球的高度Y=15.80cm
3
第二篇:小球撞击试实验报告
小球撞击试验报告
试验目的:实现两个质量,速度不同的小球碰撞的物理过程。
试验要求:可以任意输入两小球的速度和质量。
试验实现过程:
首先要有两个不同的小球,分别命名为小球A,小球B,通过画图软件画两个不同颜色的立体小球。其格式为.bmp。通过VC++的位图引入加载到资源当中。
小球引入到资源后,就该实现两球的碰撞。第一个要问题是怎样把引入的小球在窗口中显示。通过classwizard在视图类加载消息响应函数oncreat,创建一个窗口,用位图显示的语句使小球在窗口中显示。小球在窗口显示之后就该让小球动起来。小球的运动本质上是通过时间让小球的坐标不断的改变。这就该想到用classwizard在视图类添加消息响应函数timer,通过制定一个时间定时器调用时间函数timer。这步做好之后,就该考虑怎样实现小球碰撞的物理过程,利用物理公式来实现这个过程。然后添加背景图片。
代码如下:
1. 声明视图类变量。
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(1,str);
pstatus->SetPaneText(2,str1);
}
CRect rect1;
GetClientRect(&rect1);
CClientDC dc(this);
CDC men,men1,men2,men3;
if (m_ptpos1_x+n_FrameWidth>=m_ptpos2_x)
{
double v01=v1;
double v02=v2;
v1=((mass_1-mass_2)*v01+2*mass_2*v02)/(mass_1+mass_2);
v2=((mass_2-mass_1)*v02+2*mass_1*v01)/(mass_1+mass_2);
if (waveOutGetNumDevs()==0)
{
MessageBox("no audio device!","error");
return;
}
MessageBeep(-1);
if(m_ptpos1_x+n_FrameWidth>=rect1.right||m_ptpos1_x<rect1.left)//超出左右边界
v1=-v1;
if(m_ptpos2_x+n_FrameWidth>=rect1.right||m_ptpos2_x<=rect1.left)//超出左右边界
v2=-v2;
m_ptpos1_x+=v1;
m_ptpos2_x+=v2;
//CClientDC dc(this);
men.CreateCompatibleDC(&dc);
men1.CreateCompatibleDC(&dc);
men.SelectObject(&m_Bitmap);
CBitmap bitmapmask;
bitmapmask.CreateBitmap(n_FrameWidth,n_FrameHeight,0,0,NULL);
men1.SelectObject(&bitmapmask);
men.SetBkColor(RGB(255,255,255));
men1.BitBlt(0,0,n_FrameWidth,n_FrameHeight,&men,0,0,SRCCOPY);
dc.BitBlt(m_ptpos1_x,m_ptpos1_y,n_FrameWidth,n_FrameHeight,&men,0,0,SRCINVERT);
dc.BitBlt(m_ptpos1_x,m_ptpos1_y,n_FrameWidth,n_FrameHeight,&men1,0,0,SRCAND);
dc.BitBlt(m_ptpos1_x,m_ptpos1_y,n_FrameWidth,n_FrameHeight,&men,0,0,SRCINVERT);
men2.CreateCompatibleDC(&dc);
men3.CreateCompatibleDC(&dc);
men2.SelectObject(&m_Bitmap1);
CBitmap bitmapmask1;
bitmapmask1.CreateBitmap(n_FrameWidth1,n_FrameHeight1,0,0,NULL);
men3.SelectObject(&bitmapmask1);
men2.SetBkColor(RGB(255,255,255));
men3.BitBlt(0,0,n_FrameWidth1,n_FrameHeight1,&men2,0,0,SRCCOPY);
dc.BitBlt(m_ptpos2_x,m_ptpos2_y,n_FrameWidth1,n_FrameHeight1,&men2,0,0,SRCINVERT);
dc.BitBlt(m_ptpos2_x,m_ptpos2_y,n_FrameWidth1,n_FrameHeight1,&men3,0,0,SRCAND);
dc.BitBlt(m_ptpos2_x,m_ptpos2_y,n_FrameWidth1,n_FrameHeight1,&men2,0,0,SRCINVERT);
6. 添加函数OnSetting。
CXiaoQiudialog dlg;
dlg.m_V1=v1;
dlg.m_V2=v2;
dlg.m_M1=mass_1;
dlg.m_M2=mass_2;
if (dlg.DoModal()==IDOK)
{
v1=dlg.m_V1;
v2=dlg.m_V2;
mass_1=dlg.m_M1;
mass_2=dlg.m_M2;
}
7. 添加函数OnEraseBkgnd。
CBrush *poldbrush=pDC->SelectObject(&m_BKBrush);
CRect rect;
pDC->GetClipBox(&rect);
pDC->PatBlt(rect.left,rect.top,rect.Width(),rect.Height(),PATCOPY);
pDC->SelectObject(poldbrush);
以上就是我的设计思路与实现代码。