2014-03-31 5 views
0

나는 꼭지점 중 하나의 각도를 얻고 자하는 세 개의 벡터 점을 가지고 있습니다. C = (a² + b² - c²) 왜냐하면 - 나는 코사인의 법칙을 사용하려고/2AB,하지만 난 내가 세 가지를 삽입 감안할 때() 메소드세 벡터 점 사이의 각도

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; 
} 

비 정확한 results.Here 내 GetAngle입니다 얻을 벡터 :

결과 : 내가 각각 VEC3의 각도를 찾으려면

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

가끔 다시 내가 가끔 각도를 반전 얻을 벡터를 움직이기 시작하면 나에게 관찰 NaN의 다음 하드 NaN.Its 무슨 일이 일어나고 있는지 검사하지만 나는 생각했다. 나는 공식을 얻었다. 그리고 코딩 권리?

편집 : 내가 위치 (1,5) 내가 90 개도를 얻을 수 vec1를 이동할 때 위치 (1,10) 내가 40 개도를 얻기 위해 더, 더 관찰 .. Rawling에

+0

길이 삼각형의 모서리의 길이가 있지만 각의 거리를 계산하는 원점에서 삼각형의 점. – Rawling

+0

내 생각에 내가해야 할 일은 다음과 같습니다. lenghtA = (vec3.x - vec2.x, vec3.y - vec2.y) –

+1

네, 올바른 세 가지 감산으로 조심하십시오. A, B, C와 같은 것들! – Rawling

답변

0

네 덕분에 내가 성공적으로 구현 방법 : 여기 코드입니다 :

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; 

    } 

지금 작품 매력 .. 코사인의 법칙에