C#Vector3D运算符' - '不能应用t类型'Vector3D'和double

问题描述 投票:0回答:2

太空探索测试版的那些人一直帮助我计算轨道元素,但我一直坚持在C#中应用一个公式一段时间,需要一些建议。

该公式适用于偏心矢量使用:

{thing e = case in frame} h} {}} r} {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 beta提供的答案相匹配,而且与我尝试的公式的不同版本相匹配。所以代码和公式都很好。谢谢你的协助。

c# math vector formulas orbital-mechanics
2个回答
1
投票

r / ||r||是坐标的单位向量,即Radias / Radias.Length = (1, 0, 0)

Vector3D e = rh / Mu - Radias / Radias.Length

你只是在你的R声明和Radias本身混合了数字Radias

[请注意,我们可以简单地使用overloaded division operation /而不是Vector3D.Divide]


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不是一个矢量吗?它似乎是基本公式中的向量,不在您的代码中

© www.soinside.com 2019 - 2024. All rights reserved.