选择要转动的一侧

时间:2015-11-24 09:00:03

标签: c++ rotation 2d

我正在实施一个针对最近敌人的归巢子弹。

我可以通过点积来计算玩家的前向矢量和从玩家到目标的矢量之间的角度。 如果我把结果放到acos(),它会给我两个向量之间的弧度角度。

现在我希望我的物体在飞行时旋转并朝向敌人。但问题来了,我怎么知道哪一侧要旋转?我知道2个向量之间的角度,但是我的点值不会告诉我目标是在播放器的左侧还是右侧。

我想知道我是否采取更长的路线,而且我可能没有意识到一种更简单的方法来确定我需要旋转多少以及朝向目标旋转哪一方。

2 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望获得方向,您的太空飞船vecS应该旋转,以便查看目标vecT

我建议计算角度alphavecS和x轴包围,以及角度betavecT和x-轴封闭。 如果alpha大于beta,您将向右旋转,否则向左旋转。

这是用于计算角度和正确旋转方向的伪代码:

// Pseudocode:
alpha = arctan( vecS.y / vecS.x );
beta = arctan ( vecT.y / vecS.x );

if(alpha > beta)
  // Rotate right by alpha - beta
else
  // Rotate left by alpha - beta

答案 1 :(得分:0)

您可以像这样计算副矢量的点积:

vector Side( Front.Y, -Front.X );
float dotSide = dot( Target, Side );
if( dotSide <= 0 )
{
    // one side
}
else
{
    // another side
}