慢羊羊的空间

无为,无我,无欲,居下,清虚,自然

力学:弹跳球模拟程序 铜牌收录

本程序根据物理原理模拟一个球自由落体并持续弹跳的效果,小球只受重力影响,忽略空气阻力,反弹时能量损耗 10%。

程序源代码如下:

////////////////////////////////////////////////////////////////////
// 程序名称:物理反弹球模拟程序
// 编译环境:VC6.0 / 2019,EasyX_20220901
// 作  者:yw80@qq.com
// 最后修改:2012-3-29
//
#include <graphics.h>
#include <conio.h>

int main()
{
	double h = 300;				// 高度
	double v = 0;				// 速度(方向向下)
	double dv = 9.8 / 50;		// 加速度(每 1/50 秒)

	// 初始化绘图窗口
	initgraph(640, 480);
	BeginBatchDraw();

	// 画地平线
	line(100, 421, 540, 421);

	while(!_kbhit())
	{
		v += dv;				// 根据加速度计算速度
		h -= v;					// 计算高度

		// 如果高度低于地平线,实现反弹,速度方向取反
		if (h <= 0)
		{
			h = -h;
			v = - v * 0.9;		// 反弹时能量损耗 10%
		}

		// 画绿色球
		setlinecolor(GREEN);
		circle(320, 400 - int(h), 20);

		FlushBatchDraw();
		Sleep(20);				// 延时(每帧延时 1/50 秒)

		// 擦掉球
		setlinecolor(BLACK);
		circle(320, 400 - int(h), 20);
	}

	// 关闭绘图窗口
	EndBatchDraw();
	closegraph();
	return 0;
}

评论 (5) -

  • h -= (v - dv / 2); // 计算高度 应改为 h -= (v + dv / 2); // 计算高度 因为下落是加速运动,否则会导致小球弹跳模式不符合实际物理模型!
  • 这个小球会闪,怎么办?听说双缓冲机制可以解决这个问题,该怎么改呢?
  • 这个要是抛去那个能量损耗该怎么写啊
    • 修改“反弹时能量损耗 10%”那行代码,不要 *0.9 就好了啊

添加评论