代码之家  ›  专栏  ›  技术社区  ›  Led

二维矢量角-正确的计算方法是什么?

  •  11
  • Led  · 技术社区  · 14 年前

    二维XNA中矢量角的标准工作方式是什么?

    右0度,上90度,左180度,下270度?

    什么是的“标准”实现

    float VectortoAngle(Vector2 vec)
    

    Vector2 AngleToVector(float angle)
    

    所以说VectortoAngle(AngleToVector(PI))==PI?

    2 回复  |  直到 14 年前
        1
  •  22
  •   Venesectrix    14 年前

    Here 是一个简单的2dxna旋转教程,给你更多的信息。

    至于将向量转换成角度和角度,我发现了几个很好的实现 here

    Vector2 AngleToVector(float angle)
    {
        return new Vector2((float)Math.Cos(angle), (float)Math.Sin(angle));
    }
    
    float VectorToAngle(Vector2 vector)
    {
        return (float)Math.Atan2(vector.Y, vector.X);
    }
    

    另外,如果你是新的二维编程,你可能想看看 Torque X 2D ,这为你提供了很多。如果你花钱为XNA开发引擎,你就可以免费得到引擎二进制文件,还有一个实用类,它可以从角度到向量再到其他有用的函数。

    编辑: 正如拉涅利在评论中指出的,当上升为0度时,这个函数没有意义。这是一个(向上是(0,-1),右是(1,0),向下是(0,1),左是(-1,0):

    Vector2 AngleToVector(float angle)
    {
        return new Vector2((float)Math.Sin(angle), -(float)Math.Cos(angle));
    }
    
    float VectorToAngle(Vector2 vector)
    {
        return (float)Math.Atan2(vector.X, -vector.Y);
    }
    

    我还想指出,我已经使用了一段时间的扭矩,它使用0度的上升,所以这就是我得到的部分。向上的意思是,在本例中,以与文件中相同的方式将纹理绘制到屏幕上。所以倒过来就是把纹理画倒过来。

        2
  •  1
  •   Tom Gillen    14 年前

    在XNA中,某个角度所代表的方向没有约定,所以您可以随意定义它。

    我不确定我上次在比赛中使用角度是什么时候。几乎在任何情况下,直接使用向量都更容易,如果一开始就不那么直观的话。