У меня есть два предмета, давайте назовем их Obj1 и Obj2 ... Оба имеют текущую позицию pos1 и pos2 ... Более того, у них есть текущие векторы скорости speed1 и speed2 ... Как я могу убедиться, что, если их расстояния достигают ближе (с проверкой тока и расстояния NEXT) они будут удаляться друг от друга?
У меня есть функция угла со знаком, которая дает мне угол между двумя векторами со знаком. Как я могу использовать его, чтобы проверить, насколько я должен вращать speed1 и speed2 для перемещения этих спрайтов друг от друга?
public float signedAngle(Vector2 v1, Vector2 v2)
{
float perpDot = v1.X * v2.Y - v1.Y * v2.X;
return (float)Math.Atan2(perpDot, Vector2.Dot(v1, v2));
}
Я проверяю СЛЕДУЮЩИЕ и ТЕКУЩИЕ расстояния следующим образом:
float currentDistance = Vector2.Distance(s1.position, s2.position);
Vector2 obj2_nextpos = s2.position + s2.speed + s2.drag;
Vector2 obj1_nextpos = s1.position + s1.speed + s1.drag;
Vector2 s2us = s2.speed;
s2us.Normalize();
Vector2 s1us = s1.speed;
s1us.Normalize();
float nextDistance = Vector2.Distance(obj1_nextpos , obj2_nextpos );
Затем, в зависимости от того, становятся они больше или меньше, я хочу убрать их (либо увеличивая их текущую скорость в том же направлении, либо делая их дальше, чем я провалил) ...
if (nextDistance < currentDistance )
{
float angle = MathHelper.ToRadians(180)- signedAngle(s1us, s2us);
s1.speed += Vector2.Transform(s1us, Matrix.CreateRotationZ(angle)) * esc;
s2.speed += Vector2.Transform(s2us, Matrix.CreateRotationZ(angle)) * esc;
}
Есть идеи?