我有三个矢量点,我想得到其中一个顶点的角度。 我试图使用余弦定律 - 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度..
答案 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;
}
现在就像一个魅力..