XNA: adding a force to a vector

本小妞迷上赌 提交于 2019-12-13 02:42:49

问题


i do have 2 points on a 2d plane. one has already an vector that does determine in which direction it will move.

now i want to add a vector to this existing vector. so he accelerates in the direction of the other point.

to be a bit more clear, it is about 2 asteroids flying in space (only 2d) and gravitation should move them a bit closer to each other.

what i did build till now is this:

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);

in the moment the direction calculated is completly off. surely i am making just a stupid mistake, but i have no idea.


回答1:


You need to pass your direction angle in in radians to Math.sin and Math.Cos (rather then in degree as you do in your smaple code).

see also: http://msdn.microsoft.com/en-us/library/system.math.sin.aspx

The angle, a, must be in radians. Multiply by Math.PI/180 to convert degrees to radians.




回答2:


My mechanics and linear algebra are a bit rusty but I think you should be able to do it without resorting to trigonometry. These formulae probably need tweaking, I'm not sure if I got u and -u mixed up.

Here it is in pseudo code

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

rinse and repeat




回答3:


Not completely sure what you try to do. Why can't you just use Vector2.Add(v1, v2)?



来源:https://stackoverflow.com/questions/3564310/xna-adding-a-force-to-a-vector

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!