2013-06-25 74 views
0

對於我的解釋,我將使用度數。上一個半徑和下一個半徑

比方說,從畫布中心看,我有45度的角度。 從中心看,我有10°,60°,180°和350°的物體。

在這種情況下,45°以前的角度是10°。 45°的下一個角度是60°。

但是現在的問題:

如果什麼角度爲6°,例如。那麼之前的角度是350°。 或者如果角度是355°,那麼下一個角度是10°。

假設我們有一個類似於以下的數組,我該如何計算出哪一個得到?

angles = [10, 60, 180, 350] 
theAngle = 45 

僞代碼會做。

+3

你嘗試過什麼嗎? –

+0

如果角度小於數組中的第一個元素,那麼假定數組已排序並在0到359範圍內,則上一個角度將是數組中的最後一個元素。一旦你把它寫在紙上,我認爲這將是顯而易見的。 – paddy

回答

0

您可以使用模運算符,例如使用C或C類語言查找「上一個」角度:

int N = 4; 
int angles[N] = { 10, 60, 180, 350 }; 
int theAngle = 45; 

int prevAngle = angles[0];   // init - assume angle[0] is "previous" angle 
int minAngleDelta = (theAngle - prevAngle) % 360; 
for (i = 1; i < N; ++i)    // for each remaining angle 
{ 
    int angleDelta = (theAngle - angles[i]) % 360; 
    if (angleDelta < minAngleDelta) // if we found a smaller delta (modulo 360) 
    {      
     minAngleDelta = angleDelta; // track min angle delta 
     prevAngle = angles[i];  // and corresponding angle 
    }      
} 

注意:即使您的角度數組未被排序,也可以使用。