2014-07-22 2 views
-2

길이가 주어진 2 줄 사이의 각을 찾는 데 도움이 필요합니다. 제가 발견 한 해결책은 어떤 각도에서 효과가 있습니다. 나는 0에서 360까지의 학위를 얻는 해결책을 선호 하겠지만 그렇게 중요하지는 않다.길이가 주어진 두 줄 사이의 각도

Angle i need lies between s1 and s2. 

    s1 (2m) 
    _________      /| 
      | works  s1(2m)/| 
      |     /|s2(2m) 
    s3  | s2(2m)   / | 
      |      s3 

//s3 is calculated from the start point of s1 and end of s2. 

//this works for some angles but not all the time. 
double GetAngle(double s1,double s2,double s3) 
{ 
    double r=acos((pow(s1,2)+pow(s2,2)-pow(s3,2))/2*s1*s2); 
    r=((180.0*a)/M_PI); 
    return r; 
} 
+0

말, 10도 및 350도를 어떻게 구별하려고합니까? –

+1

다른 기준을 부과하지 않으면 그렇게 할 수 없습니다. 항상 두 개의 각도 x와 360-x가 생깁니다. –

+5

당신의 방정식이 부정하고 분모 안에 괄호가 없다면, 그것은 r = acos ((pow (s1,2) + pow (s2,2) -pow (s3,2))/(2 * s1 * s2)); – CoryKramer

답변

0

원하는 것은 삼각형의 3면 길이를 취하여 각도 중 하나를 반환하는 함수라고 가정합니다. 주석에서 언급 한 것처럼 코사인 규칙을 적용해야합니다.

double GetAngle(double s1, double s2, double s3) { 
    double r = acos((pow(s1, 2) + pow(s2, 2) - pow(s3, 2))/(2 * s1 * s2)); 
    return (180.0 * r/PI); 
} 

이 시점에서 내부 각이 삼각형입니다. 점이나 선 사이에 방위가 실제로 필요한 경우 각도 (A) 또는 (360 - A)를 사용할지 여부를 결정하기 위해 두 번째 조건을 적용해야합니다. 이것은 길이만으로 또는 귀하가 제공 한 정보로부터 결정될 수 없습니다.