XNA: добавление силы к вектору - PullRequest
1 голос
/ 25 августа 2010

у меня есть 2 точки на 2d плоскости. у человека уже есть вектор, который определяет направление его движения.

Теперь я хочу добавить вектор в этот существующий вектор. поэтому он ускоряется в направлении другой точки.

Чтобы быть немного более ясным, это около 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 ]

3 голосов
/ 25 августа 2010

Вам нужно передать угол направления в радианах в Math.sin и Math.Cos (а не в градусах, как в коде smaple).

см. Также: http://msdn.microsoft.com/en-us/library/system.math.sin.aspx

Угол a должен быть в радианах. Умножьте на Math.PI / 180, чтобы преобразовать градусы в радианы.

1 голос
/ 25 августа 2010

Моя механика и линейная алгебра немного ржавые, но я думаю, что вы сможете сделать это, не прибегая к тригонометрии. Эти формулы, вероятно, нуждаются в настройке, я не уверен, что я вас и -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

промыть и повторить

0 голосов
/ 25 августа 2010

Не совсем уверен, что вы пытаетесь сделать.Почему вы не можете просто использовать Vector2.Add (v1, v2)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...