2013-06-25 8 views
0

Для моего объяснения я буду использовать градусы.предыдущий радиус и следующий радиус

Предположим, у меня есть угол 45 градусов, видимый из центра холста. У меня есть объекты при 10 °, 60 °, 180 ° и 350 °, которые видны из центра.

В этом случае предыдущий угол от 45 ° составляет 10 °. Следующий угол от 45 ° составляет 60 °.

Но теперь проблема:

Что делать, если угол 6 °, например. Тогда предыдущий угол равен 350 °. Если угол равен 355 °, то следующий угол равен 10 °.

Как я могу выяснить, какой из них получить, если у нас есть массив, подобный следующему?

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

Psuedo-code будет делать.

+3

Вы пробовали что-нибудь? –

+0

Если угол меньше первого элемента массива, то, предполагая, что массив отсортирован и в пределах диапазона 0..359, предыдущий угол будет последним элементом в массиве. Я думал, это будет очевидно, как только вы написали его на бумаге. – paddy

ответ

0

Вы можете просто использовать оператор modulo, например. найти «предыдущий» угол, используя 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 
    }      
} 

Примечание: это работает, даже если массив углов не сортируется.

Смежные вопросы