XNA:向矢量添加力

时间:2010-08-25 09:07:38

标签: c# vector xna

我在2d飞机上有2分。一个人已经有一个确定它将向哪个方向移动的向量。

现在我想为这个现有的向量添加一个向量。所以他朝着另一点的方向加速。

更清楚一点,它是大约2个在太空中飞行的小行星(仅2d),并且引力应该使它们彼此靠得更近。

到目前为止,我所做的是:

c = body.position - body2.position;
dist = c.Length();

acc = (body.masse * body2.masse) / (dist * dist);

xDist = body2.position.X - body.position.X;
yDist = body2.position.Y - body.position.Y;

direction = MathHelper.ToDegrees((float)(Math.Atan2((double)yDist, (double)xDist)));

body.velocity.Y = body.velocity.Y + (float)(Math.Sin(direction) * acc);
body.velocity.X = body.velocity.X + (float)(Math.Cos(direction) * acc);

在计算方向完全关闭的那一刻。我当然只是犯了一个愚蠢的错误,但我不知道。

3 个答案:

答案 0 :(得分:3)

您需要将弧度中的方向角传递给Math.sin和Math.Cos(而不是像你在你的代码中那样以度为单位)。

另见: http://msdn.microsoft.com/en-us/library/system.math.sin.aspx

  

角度a必须是弧度。乘以Math.PI / 180将度数转换为弧度。

答案 1 :(得分:1)

我的力学和线性代数有点生疏,但我认为你应该能够在不借助三角学的情况下做到这一点。这些公式可能需要调整,我不确定我是否让你和-u混淆了。

这里是伪代码

T is whatever time period you're iterating over
G is the gravitational constant

body1 starts with  a velocity of v1
body2 starts with  a velocity of v2

c = body.position - body2.position

c1 is a vector
use the vector c to get a vector of length 1 in the direction of the force

u = c1 / c.Length()

body1 should have an acceleration vector of a1 =  G * body2mass/c.Length()^2 * (-u)

body2 should have an acceleration vector of a2 = G * body1mass/c.Length()^2 * (u)

body1 has a new velocity vector of v1 + a1/T

body2 has a new velocity vector of v1 + a2/T

冲洗并重复

答案 2 :(得分:0)

不完全确定您尝试做什么。为什么你不能只使用Vector2.Add(v1,v2)?