4. 实现地球重力模型

任务说明

本案例实现地球重力加速度随高度变化的计算。采用平方反比模型:g(h) = g0 * (R / (R + h))²,其中 g0 = 9.80665 m/s² 为海平面标准重力加速度,R = 6371000 m 为地球平均半径,h 为海拔高度(单位:米)。该模型适用于近地空间(如火箭飞行高度在数百公里以内)的重力估算,相比常数模型能更准确反映高空气重力衰减效应。

代码实现

// gravity_model.h
#ifndef GRAVITY_MODEL_H
#define GRAVITY_MODEL_H

#define G0 9.80665      // 海平面标准重力加速度 (m/s^2)
#define R_EARTH 6371000.0  // 地球平均半径 (m)

// 平方反比重力模型:输入海拔高度h(米),返回重力加速度(m/s^2)
double gravity_inverse_square(double h);

#endif
// gravity_model.c
#include "gravity_model.h"

double gravity_inverse_square(double h) {
    double r = R_EARTH + h;          // 地心到目标点的距离
    double ratio = R_EARTH / r;      // 半径比
    return G0 * ratio * ratio;       // g = g0 * (R/(R+h))^2
}
// main.c
#include <stdio.h>
#include "gravity_model.h"

int main() {
    // 测试不同高度下的重力加速度
    double altitudes[] = {0.0, 10000.0, 100000.0, 200000.0, 500000.0};
    int n = sizeof(altitudes) / sizeof(altitudes[0]);

    printf("高度(km)     重力加速度(m/s^2)\n");
    printf("-------------------------------\n");
    for (int i = 0; i < n; i++) {
        double h = altitudes[i];
        double g = gravity_inverse_square(h);
        printf("%8.1f      %10.6f\n", h / 1000.0, g);
    }
    return 0;
}

编译与运行

gcc -Wall -o gravity gravity_model.c main.c
./gravity

预期输出

高度(km)     重力加速度(m/s^2)
-------------------------------
     0.0       9.806650
    10.0       9.775950
   100.0       9.501398
   200.0       9.204754
   500.0       8.441515

验证方法

运行程序后,检查输出结果:

  1. 高度为0时,输出应严格等于 9.806650(即 g0);
  2. 高度增大时,重力加速度单调递减,且递减趋势符合平方反比关系;
  3. 可手动计算验证:例如 h = 100 km 时,g = 9.80665 × (6371/6471)² ≈ 9.5014 m/s²,与程序输出一致。

若以上条件均满足,则说明平方反比重力模型实现正确。

平方反比重力模型 g(h) = g₀·(R/(R+h))² 高度 h (km) g (m/s²) 0 100 200 300 400 500 8.0 8.5 9.0 9.5 10.0 海平面: 9.807 100km: 9.501 200km: 9.205 500km: 8.442 常数模型 g = 9.807 平方反比模型 常数模型

上图展示了平方反比模型与常数模型的差异。随着高度增加,重力加速度按平方反比规律逐渐减小,在500 km高度处已降至约8.44 m/s²,而常数模型始终为9.807 m/s²。该模型为火箭飞行中重力损失计算和弹道设计提供了更精确的加速度输入。