我有两个物品,让我们称它们为Obj1和Obj2...它们都有当前位置pos1和pos2..此外,它们还具有当前速度向量speed1和speed2...如何确保如果它们的距离越来越近(检查当前和下一个距离),它们将远离对方移动?
我有一个带符号角函数,可以给我两个向量之间的带符号角度..如何利用它来检查我应该旋转speed1和speed2多少,以使这些精灵彼此移开?
我这样检查NEXT和CURRENT距离:
有什么想法吗?
我有一个带符号角函数,可以给我两个向量之间的带符号角度..如何利用它来检查我应该旋转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));
}
我这样检查NEXT和CURRENT距离:
我这样检查NEXT和CURRENT距离:
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;
}
有什么想法吗?