代码之家  ›  专栏  ›  技术社区  ›  Arne Peirs

计算同步轨道[闭合]

  •  1
  • Arne Peirs  · 技术社区  · 9 年前

    我正在尝试建立一个方程式来计算行星的同步轨道。我在维基上找到了一个方程式,并试图用C#复制,但结果完全不正确。

    公式:
    KSP equation

    是离地球的高度
    G 是重力常数6.674E-11
    M 是行星的质量
    是轨道周期(秒)
    卢比 是行星的半径

    代码:

    double G = 6.674E-11;
    syncOrbit = Math.Pow((G * b.Mass * Math.Pow(b.orbit.period, 2.0)) / (4 * Math.Pow(Math.PI, 2.0)), 1.0 / 3.0) - b.Radius;
    

    输入:

    • b、 质量=5.29157926281091E+22 kg
    • b、 轨道。周期=9203545秒
    • b、 半径=600000 m

    期望结果: 2868.74公里

    给定结果: 195814.71公里

    我是在代码中做错了什么,还是只是(从wiki上)有一个不正确的公式?

    3 回复  |  直到 9 年前
        1
  •  1
  •   Arne Peirs    9 年前

    我发现了我的错误,我使用了错误的轨道周期。我使用了绕太阳一周的时间(1年),而我需要行星的恒星自转周期(1天)才能得到正确的结果。

    double G = 6.674E-11;
    syncOrbit = Math.Pow((G * b.Mass * Math.Pow(b.rotationPeriod, 2.0)) / (4 * Math.Pow(Math.PI, 2.0)), 1.0 / 3.0) - b.Radius;
    
        2
  •  0
  •   Dave Cousineau    9 年前
    double inner = G * b.Mass * Math.Pow(b.orbit.period, 2.0)/ ( 4* Math.PI * Math.PI);
    double answer = Math.Pow(inner, 1.0/3.0) - b.Radius;
    
        3
  •  0
  •   Dave Cousineau    9 年前

    所以我猜你误解了这个方程式。我不是物理学家,但这个公式似乎是用来计算两个轨道物体之间的平均距离的。使用公式并将代码重构为程序,我得到以下结果,它使用太阳和地球的值生成正确答案。

    const double G = 6.674E-11;
    Console.WriteLine("G is {0}", G);
    
    const double massOfEarth = 5.972E+24;
    const double massOfSun = 1.989E+30;
    const double mass = massOfSun + massOfEarth;
    Console.WriteLine("mass is {0}", mass);
    
    // 365 days in seconds
    const double period = 3.15569E+7;
    Console.WriteLine("period is {0}", period);
    
    // radius of the earth
    const double radius = 6.371E+6;
    Console.WriteLine("radius is {0}", radius);
    
    double denominator = 4 * Math.Pow(Math.PI, 2.0);
    Console.WriteLine("Denominator is {0}", denominator);
    
    double numerator = G * mass * Math.Pow(period, 2.0);
    Console.WriteLine("numerator is {0}", numerator);
    
    double fraction = numerator / denominator;
    Console.WriteLine("fraction is {0}", fraction);
    
    double root = Math.Pow(fraction, 1.0 / 3.0);
    Console.WriteLine("root is {0}", root);
    
    double result = root - radius;
    Console.WriteLine("final result is {0}", result);
    

    输出为:

    G is 6.674E-11
    mass is 1.989005972E+30
    period is 31556900
    radius is 6371000
    Denominator is 39.4784176043574
    numerator is 1.32193760361067E+35
    fraction is 3.34850706747872E+33
    root is 149606480630.306
    final result is 149600109630.306
    

    其中太阳和地球之间的平均距离为1496亿米。