太空探索测试版上的那些人一直在帮我计算轨道元素,但我一直坚持在C#中应用一个公式一段时间,需要一些建议。
该公式适用于偏心矢量:
$$ \ vec e = \ frac {\ vec v \ times \ vec h} {\ mu} \ - \ frac {\ vec r} {|| r ||} $$
(e = v * h / mu -r / || r ||)
我的公式代码如下;
double V = 7770;
double R = 6771000;
double Mu = 4e+14;
Vector3D velocity = new Vector3D(0, V, 0);
Vector3D Radias = new Vector3D(R, 0, 0);
Vector3D H = Vector3D.CrossProduct(Radias, velocity);//Angular Momentum = r * v
//e = v * h /mu - r / ||r||
Vector3D rh = Vector3D.CrossProduct(velocity, H);
double t = Radias.Length;
Vector3D e = Vector3D.Divide(rh, Mu) - R / t;
现在提出
运营商' - '不能应用于类型' Vector3D'的操作数。和' double'
现在我现在说它不能将一个矢量除以双,但我不确定如何绕过它,我想到了铸造,但我不知道该怎么做?
这真的是我的数学技能和C#数学编程的优势。
任何帮助将不胜感激。
编辑以下是我正在使用的源Materials之一,因此您可以正确查看公式。
编辑2 以下是工作代码:
Vector3D e = Vector3D.Divide(rh, Mu) - Radias / Radias.Length;
double e1 = e.Length;
Console.WriteLine(e1);
带来的答案不仅与用户提供的Space Exploration测试版答案相匹配,而且与我尝试的公式的不同版本相匹配。所以代码和公式都很好。谢谢你的协助。
答案 0 :(得分:1)
r / ||r||
是您坐标的单位向量,即Radias / Radias.Length
= (1, 0, 0)
:
Vector3D e = rh / Mu - Radias / Radias.Length
您只是在R
声明和Radias
声明中混淆了数字Radias
。
[请注意,我们只需使用overloaded division operation /
代替Vector3D.Divide
]
答案 1 :(得分:0)
它并不是说你不能分裂。它说你不能减去。 如果要为向量的每个分量减去double,则需要使用它创建向量。在您的情况下,问题是您在此处显示的最后一行:
Vector3D e = Vector3D.Divide(rh, Mu) - R / t;
在这一行中,Vector3D.Divide(rh, Mu)
是一个向量,R / t
是一个双向。为此,请创建一个向量,其中三个组件设置为R / t
:
Vector3D rt = new Vector3D(R / t, R / t, R / t);
Vector3D e = Vector3D.Divide(rh, Mu) - rt;
(假设您想从矢量的所有分量中减去R / t)
编辑:再次查看您的公式,您确定R
不是一个向量吗?它似乎是基本公式中的向量,不在您的代码中