位移公式
1、速度和时间关系:
2、位移和时间关系:
3、力和加速度关系:
4、空气阻力:
受理分析
以向下运动为正方向
1、向下运动整体受力,重力加空气阻力: 
2、向上运动整理受力,重力减空气阻力:
代码实现
#include <stdio.h>
#define GRAVITY_RATIO 9.8f
#define HALF_CPS_K    0.1f 
#define TIME_STEP     0.1f
typedef 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表格画的。



















