我试图制定一个计算行星同步轨道的方程式。我在维基上找到了一个等式并尝试在C#中复制它,但结果完全不正确。
a 是来自行星的高度 G 是引力常数6.674E-11
M 是行星的质量 t 是轨道周期(秒) Rp 是行星的半径
代码:
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;
输入:
通缉结果: 2868.74 km
鉴于结果: 195814.71 km
我在代码中做错了什么,或者我只是有一个不正确的等式(来自维基)?
答案 0 :(得分:0)
我发现了我的错误,我使用了错误的轨道周期。我使用围绕太阳的一个轨道的时间(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;
答案 1 :(得分:0)
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;
答案 2 :(得分:0)
所以我的猜测是你误解了这个等式。我不是物理学家,但公式似乎是计算两个轨道物体之间的平均距离。使用公式并将代码重构为程序,我得到以下内容,它使用Sun和Earth的值生成正确的答案。
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亿米。