C# Vector3D 运算符 '-' 不能应用于类型 'Vector3D' 和 double
C# Vector3D Operator '-' cannot be applied t type 'Vector3D' and double
Space Exploration Beta 的好心人一直在帮助我计算轨道元素,但我一直坚持在 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;
现在这会出现
Operator '-' cannot be applied to operands of type 'Vector3D' and 'double'
现在我说不能将向量除以双精度但我不确定如何解决这个问题,我想到了转换但我不知道该怎么做?
这真的是我数学技能和 C# 数学编程的边缘。
任何帮助将不胜感激。
编辑 这是我正在使用的来源之一 Materials,因此您可以正确地看到公式。
编辑 2 这是工作代码:
Vector3D e = Vector3D.Divide(rh, Mu) - Radias / Radias.Length;
double e1 = e.Length;
Console.WriteLine(e1);
带来的答案不仅与用户通过 Space 探索测试版提供的答案相匹配,而且与我尝试过的不同版本的公式相匹配。所以代码和公式都不错。谢谢你的协助。
并不是说不能除。它说你不能减去。
如果要对矢量的每个分量减去双精度数,则需要用它创建一个矢量。在您的情况下,问题是您在此处显示的最后一行:
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
不应该是向量吗?它似乎是基本公式中的一个向量,不在您的代码中
r / ||r||
是坐标的单位向量,即Radias / Radias.Length
= (1, 0, 0)
:
Vector3D e = rh / Mu - Radias / Radias.Length
您只是混淆了 Radias
声明中的数字 R
和 Radias
本身。
[请注意,我们可以简单地使用 overloaded division operation /
而不是 Vector3D.Divide
]
Space Exploration Beta 的好心人一直在帮助我计算轨道元素,但我一直坚持在 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;
现在这会出现
Operator '-' cannot be applied to operands of type 'Vector3D' and 'double'
现在我说不能将向量除以双精度但我不确定如何解决这个问题,我想到了转换但我不知道该怎么做?
这真的是我数学技能和 C# 数学编程的边缘。
任何帮助将不胜感激。
编辑 这是我正在使用的来源之一 Materials,因此您可以正确地看到公式。
编辑 2 这是工作代码:
Vector3D e = Vector3D.Divide(rh, Mu) - Radias / Radias.Length;
double e1 = e.Length;
Console.WriteLine(e1);
带来的答案不仅与用户通过 Space 探索测试版提供的答案相匹配,而且与我尝试过的不同版本的公式相匹配。所以代码和公式都不错。谢谢你的协助。
并不是说不能除。它说你不能减去。 如果要对矢量的每个分量减去双精度数,则需要用它创建一个矢量。在您的情况下,问题是您在此处显示的最后一行:
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
不应该是向量吗?它似乎是基本公式中的一个向量,不在您的代码中
r / ||r||
是坐标的单位向量,即Radias / Radias.Length
= (1, 0, 0)
:
Vector3D e = rh / Mu - Radias / Radias.Length
您只是混淆了 Radias
声明中的数字 R
和 Radias
本身。
[请注意,我们可以简单地使用 overloaded division operation /
而不是 Vector3D.Divide
]