物体的加速运动(只受重力影响)

 

#include <Windows.h>
#include <iostream>

 

const int X=200,Y=50;    //程序窗口左上角相对于屏幕的坐标 
const int WIDTH=640,HEIGHT=480;  // //程序窗口的宽与高

DWORD tPre,tNow;      //tPre记录上一次绘图的时间,tNow记录此次准备绘图的时间
int x=0,y=0,vx=3,vy=0,gy=1;  //x、y表示物体的初始位置,vx、vy表示速度的变化量,gy表示重力加速度

 

HDC hdc,mdc,bufdc;
HBITMAP bg,dra;
RECT rect;

 

void MyPaint(HDC);
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

 

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
 const std::string szTitle="加速运动";

 WNDCLASS winclass={CS_HREDRAW|CS_VREDRAW,WndProc,0,0,hInstance,LoadIcon(NULL,IDI_APPLICATION),
  LoadCursor(NULL,IDC_ARROW),(HBRUSH)GetStockObject(WHITE_BRUSH),NULL,szTitle.c_str()};

 if(!RegisterClass(&winclass))
  return false;

 HWND hWnd=CreateWindow(szTitle.c_str(),szTitle.c_str(),WS_OVERLAPPEDWINDOW,X,Y,WIDTH,HEIGHT,
  NULL,NULL,winclass.hInstance,NULL);

 if(0==hWnd)
  return 0;

 ShowWindow(hWnd,SW_SHOWDEFAULT);
 UpdateWindow(hWnd);

 MSG msg;
 ZeroMemory(&msg,sizeof(MSG));

 while(msg.message!=WM_QUIT)
 {
  if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
  {
   TranslateMessage(&msg);
   DispatchMessage(&msg);
  }
  else
  {
   tNow=GetTickCount(); 
   while(tNow-tPre>=40)
    MyPaint(hdc);
  }
 }
 return msg.wParam;
}

 

LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
 HBITMAP bmp;

 switch(message)
 {
 case WM_CREATE:
  {
   hdc=GetDC(hWnd);
   mdc=CreateCompatibleDC(hdc);
   bufdc=CreateCompatibleDC(hdc);
   bmp=CreateCompatibleBitmap(hdc,WIDTH,HEIGHT);
   SelectObject(mdc,bmp);

   //加载物体位图
   bg=(HBITMAP)LoadImage(NULL,"bg.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
   dra=(HBITMAP)LoadImage(NULL,"dra.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);

   GetClientRect(hWnd,&rect);  //取得内部窗口区域大小
  }
  break;

 

 case WM_KEYDOWN:
  {
   if(wParam==VK_ESCAPE)
    DestroyWindow(hWnd);
  }
  break;

 case WM_DESTROY:
  {
   DeleteDC(bufdc);
   DeleteDC(mdc);
   DeleteObject(bg);
   DeleteObject(dra);
   ReleaseDC(hWnd,hdc);
   PostQuitMessage(0);
  }
  break;

 default:
  return DefWindowProc(hWnd,message,wParam,lParam);
 }
 return 0;
}

 

void MyPaint(HDC hdc)
{
 //贴背景图
 SelectObject(bufdc,bg);
 BitBlt(mdc,0,0,WIDTH,HEIGHT,bufdc,0,0,SRCCOPY);

 //贴物体图
 SelectObject(bufdc,dra);
 BitBlt(mdc,x,y,50,50,bufdc,50,0,SRCAND);
 BitBlt(mdc,x,y,50,50,bufdc,0,0,SRCPAINT);
 BitBlt(hdc,0,0,WIDTH,HEIGHT,mdc,0,0,SRCCOPY);

 
 x+=vx;  //计算x轴方向物体坐标
 vy+=gy;  //计算y轴方向速度分量
 y+=vy;  //计算y轴方向贴图坐标

 

 if(x<=rect.right)
 {
  if(y>=rect.bottom-50)
  {
   y=rect.bottom-50;
   vy=-vy-1;
  }
 }

 

 else
 {
  x=0;
  if(y>=rect.bottom-50)
  {
   y=rect.bottom-50;
   vy=-vy-1;
  }
 }
 tPre=GetTickCount();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 物体下落时,受到重力作用,会不断加速,因为重力的大小与物体的质量成正比,与物体所受的阻力成反比。当物体下落速度增加时,阻力也会随之增加,最终达到一个平衡状态,物体的速度不再增加,保持匀速运动。这个匀速运动的速度称为终端速度。 ### 回答2: 物体下落是由于重力作用,而重力会给物体施加一个恒定的加速度。当物体开始下落时,由于没有空气阻力,物体仅受重力作用,因此加速度是恒定的。 物体下落的加速度是由重力确定的,重力是质量和重力加速度的乘积,即 F = m*g(F为重力,m为物体质量,g为重力加速度)。根据牛顿第二定律 F = m*a(F为物体所受合力,m为物体质量,a为物体加速度),因此可以得到 m*a = m*g,即 a = g。 根据匀加速直线运动的运动学公式 v = u + a*t(v为最终速度,u为初速度,a为加速度,t为时间),物体下落的速度将会随着时间的增加而持续增加,因为加速度是恒定的。而物体下落的运动过程中,速度不断增加的情况被称为加速运动。 然而,当物体下落到某一高度时,由于存在空气阻力,这个阻力开始逐渐与重力平衡,并逐渐变大。当空气阻力与重力平衡时,物体所受合力变为零,加速度也将变成零,物体的速度就不再增加。 此时,物体进入匀速运动阶段,依然受到重力和空气阻力的作用,但合力为零,速度保持恒定。所以物体下落虽然开始是加速运动,但最后会变成匀速运动。 ### 回答3: 物体下落的加速度是由重力所引起的。按照牛顿的第二定律,物体的加速度与作用物体上的力成正比,与物体的质量成反比。 当物体开始下落时,重力物体唯一的作用力。由于重力始终保持不变,物体的加速度也恒定。这意味着物体下落的速度每过一段时间就增加一个相同的固定数值。 随着时间的推移,物体下落的速度每时每刻都在增加,因为它在每个时间段内所受到的加速度都是相同的。当物体逐渐获得更高的速度时,它经历的每一段时间的增量都会更大,因此速度的增长将呈现出不断加快的趋势。 然而,当物体达到自由落体的时候,即没有与空气等介质相互作用时,物体重力将与空气阻力相抵消,并且重力将保持恒定。在这种情况下,物体将以恒定的速度继续下落,形成匀速运动。 在实际情况中,空气阻力的存在会导致物体下落速度不再继续无限增加,而是稳定在一个恒定的值。在达到终端速度后,物体会继续保持匀速运动,因为空气阻力与重力相互平衡。这种终端速度取决于物体的形状、面积、密度和介质的性质。 综上所述,物体下落加速是由重力引起的,但在没有空气阻力的情况下,物体最终会达到匀速运动状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值