【问题标题】:Choosing which side to rotate选择要旋转的一侧
【发布时间】:2015-11-24 09:00:03
【问题描述】:

我正在实施瞄准最近敌人的归位子弹。

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

现在我希望我的对象在飞行时旋转并面向敌人。但是问题来了,我怎么知道要旋转到哪一边?我知道这两个向量之间的角度,但我的点积值并不能告诉我目标是在玩家的左侧还是右侧。

我想知道我是否要走更长的路线,而且我可能不知道有一种更简单的方法来确定我需要旋转多少以及转向哪一侧才能面对目标。

【问题讨论】:

标签: c++ rotation 2d


【解决方案1】:

你可以像这样计算边向量的点积:

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

【讨论】:

    【解决方案2】:

    如果我没听错的话,你想知道你的宇宙飞船vecS 应该旋转的方向,以便看到目标vecT

    我建议计算vecS 和x 轴包围的角度alpha,以及vecT 和x 轴包围的角度beta。 如果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
    

    【讨论】:

    • 这种方式行不通,因为你不能仅仅通过它的切线找到准确的角度。
    • 你能详细解释一下吗?
    • 比如Tangent(135) == Tangent(-45),但是它们是相反的。
    猜你喜欢
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    相关资源
    最近更新 更多