三个矢量点之间的角度

时间:2014-03-31 08:34:41

标签: c#

我有三个矢量点,我想得到其中一个顶点的角度。 我试图使用余弦定律 - cos C =(a²+b² - c²)/ 2ab,但是得到的结果不准确。这是我的GetAngle()方法

public static float GetAngle(Vector2 vec1, Vector2 vec2, Vector2 vec3)
{
    float lenghtA = Mathf.Sqrt(vec1.x * vec1.x + vec1.y * vec1.y);
    float lenghtB = Mathf.Sqrt(vec2.x * vec2.x + vec2.y * vec2.y);
    float lenghtC = Mathf.Sqrt(vec3.x * vec3.x + vec3.y * vec3.y);

    float calc = ((lenghtA * lenghtA) + (lenghtB * lenghtB) - (lenghtC * lenghtC)) / (2 * lenghtA * lenghtB);

    return Mathf.Acos(calc) * Mathf.Rad2Deg;
}

鉴于我插入了三个向量:

vec1 = new Vector2(1,1);
vec2 = new Vector2(1,5);
vec3 = new Vector2(5,5);

我想分别找到vec3的角度:

结果:NaN,然后​​当我开始移动向量时,我有时会有时倒转角度NaN。我很难观察并检查发生了什么但是我在想是否得到公式和编码对了?

编辑:当我将vec1移动到位置(1,5)时观察更多我得到90度,进一步到位置(1,10)我得到40度..

1 个答案:

答案 0 :(得分:0)

是的,感谢Rawling我成功实施了这个方法: 这是代码:

  public static float GetAngle(Vector2 vec1, Vector2 vec2, Vector2 vec3)
    {
        float lenghtA = Mathf.Sqrt(Mathf.Pow(vec2.x - vec1.x, 2) + Mathf.Pow(vec2.y - vec1.y,2));
        float lenghtB = Mathf.Sqrt(Mathf.Pow(vec3.x - vec2.x,2) + Mathf.Pow(vec3.y - vec2.y, 2));
        float lenghtC = Mathf.Sqrt(Mathf.Pow(vec3.x - vec1.x,2) + Mathf.Pow(vec3.y - vec1.y, 2));

        float calc = ((lenghtA * lenghtA) + (lenghtB * lenghtB) - (lenghtC * lenghtC)) / (2 * lenghtA * lenghtB);

        return Mathf.Acos(calc) * Mathf.Rad2Deg;

    }

现在就像一个魅力..