2013-06-25 4 views
0

Pour mon explication, j'utiliserai des degrés.rayon précédent et rayon suivant

Disons que j'ai un angle de 45 degrés vu du centre d'une toile. J'ai des objets à 10 °, 60 °, 180 ° et 350 ° vu du centre.

Dans ce cas, l'angle précédent de 45 ° est de 10 °. L'angle suivant de 45 ° est de 60 °.

Mais le problème:

si l'angle est de 6 °, par exemple. Ensuite, l'angle précédent est de 350 °. Ou si l'angle est de 355 °, l'angle suivant est de 10 °.

Comment puis-je savoir lequel obtenir, en supposant que nous avons un tableau similaire à ce qui suit?

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

Le code Psuedo fera l'affaire.

+3

Avez-vous essayé quelque chose? –

+0

Si l'angle est plus petit que le premier élément du tableau, en supposant que le tableau est trié et compris dans la plage 0..359, l'angle précédent sera le dernier élément du tableau. Je pensais que ce serait évident une fois que vous l'avez écrit sur papier. – paddy

Répondre

0

Vous pouvez simplement utiliser un opérateur modulo, par ex. pour trouver l'angle « précédent » en utilisant des langages C ou C comme:

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

Note: cela fonctionne même si votre tableau d'angles ne sont pas triées.