力学:模拟弹力的小程序(by frxyz1)
2012-4-16 ~ 2023-3-7
(0)
一个模拟弹力的小程序,执行效果如下:
感兴趣的可以再加上几个小球,类似的还可以模拟出绳子的效果。
以下是全部源代码:
///////////////////////////////////////////////////
// 程序名称:模拟弹力的小程序
// 编译环境:Visual C++ 6.0 / 2010,EasyX 20120404(beta)
// 作 者:frxyz1 <http://hi.baidu.com/frxyz1>
// 最后修改:2012-4-14
//
#include <graphics.h>
#include <conio.h>
#define BALL_RADIUS 30 // 小球的半径
void main()
{
initgraph(640, 480);
setfillstyle(RGB(255, 0, 0));
// 小球的初始位置
float ballx = 320.f, bally = 240.f;
// 小球的初始速度
float vx = 0.f, vy = 0.f;
MOUSEMSG m = GetMouseMsg();
BeginBatchDraw();
while (!kbhit() || getch() != 27) // 按ESC退出
{
while (MouseHit()) m = GetMouseMsg();
// 弹力公式 F = k * x
float fx = m.x - ballx;
float fy = m.y - bally + 100; // 加上重力
// 速度时间公式 Vt = V0 + a * t
// a = F / M
vx += (fx / 100);
vy += (fy / 100);
// 模拟阻力的效果
vx *= 0.99f;
vy *= 0.99f;
// ds = dv * dt
ballx += vx;
bally += vy;
cleardevice();
fillcircle((int)ballx, (int)bally, BALL_RADIUS); // 画球
line((int)ballx, (int)bally, m.x, m.y); // 画线
FlushBatchDraw();
Sleep(16);
}
EndBatchDraw();
closegraph();
}
作者:frxyz1
百度个人主页:https://www.baidu.com/p/frxyz1
添加评论
取消回复