本文主要是介绍小球垂直跳动,C语言模拟重力加速度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
位移公式
1、速度和时间关系:
2、位移和时间关系:
3、力和加速度关系:
4、空气阻力:
受理分析
以向下运动为正方向
1、向下运动整体受力,重力加空气阻力:
2、向上运动整理受力,重力减空气阻力:
代码实现
#include <stdio.h>#define GRAVITY_RATIO 9.8f
#define HALF_CPS_K 0.1f
#define TIME_STEP 0.1ftypedef enum {UP = 0, DOWN} DERICT_ENUM;typedef struct {float h;float v;float m;DERICT_ENUM direct;
} Ball;void gravity_next_status(Ball *ball)
{if (ball == NULL || ball->m == 0) {return;}float mg = ball->m * GRAVITY_RATIO;float kv2 = HALF_CPS_K * ball->v * ball->v;float f;if (ball->direct == UP) {f = mg + kv2; } else {f = mg - kv2;}float a = f / ball->m;float v = ball->v + a * TIME_STEP;float x = ball->v * TIME_STEP + 0.5 * a * TIME_STEP * TIME_STEP;if (x > ball->h) {ball->h = x - ball->h;ball->v = 0-ball->v;ball->direct = UP;return;}ball->h = ball->h - x;ball->v = v;ball->direct = (v > 0) ? DOWN : UP;return;
}int main(int argc, char const *argv[])
{Ball ball = {.h = 10, .v = 20, .m = 10, .direct = DOWN};for (int i = 0; i < 800; i++) {gravity_next_status(&ball);printf("%.2f\t%.2f\n", ball.h, ball.v);}return 0;
}
运行结果
给定一个初始状态,小球后续的运动状态如下。
参数:重力加速度:9.8、阻力系数:0.1、时间步长:0.1
参数:重力加速度:9.8、阻力系数:0.1、时间步长:0.01
总结
这里假设了小球落到地面垂直反弹,动能没有损失,利用速度和位移公式模拟重力加速度下小球的垂直运动,时间步长越精细模拟的效果越好,原因是积分过程越精细了。空气阻力设为0时,小球是来回垂直弹跳的。下一步考虑将运动路线动画演示出来,现在是拿excel表格画的。
这篇关于小球垂直跳动,C语言模拟重力加速度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!