我在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);
在计算方向完全关闭的那一刻。我当然只是犯了一个愚蠢的错误,但我不知道。
答案 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)?