2014-07-22 114 views
-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

我假設你需要的是一個函數,它取一個三角形的三邊的長度並返回其中一個角度。這就要求應用餘弦規則,如評論中所述。

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)。這不能僅根據長度來確定,也不能根據您提供的信息來確定。