10
votes

Faire la différence entre deux titres

J'ai cette méthode de détermination de la différence entre 2 titres de compas de 2 0 à 360.

Bien que cela fonctionne pour déterminer à quelle distance (comme dans, toujours une production toujours positive) je suis, j'ai du mal à comprendre Ce qui doit être fait pour introduire le signe dans la sortie.

Idéalement, si la distance la plus courte de l'en-tête initiale sur la rubrique finale est en cours dans le sens des aiguilles d'une montre, j'aimerais que l'erreur ait un signe positif, si la distance la plus courte Entre les rubriques implique de contourner la contre-classe, j'aimerais que l'erreur d'avoir un signe négatif.

Quelques exemples d'entrées / sorties souhaitées

initial - final - erreur

0 ............. ....... 30 .......... 30

30 .................... 0 .. ........ -30

360 .................... 1 .......... 1

1 ........................ 360 .......... -1

code: xxx


0 commentaires

5 Réponses :


1
votes

Je pense que votre table des résultats souhaités est incorrecte. Voici mon chemin Klunky: xxx


0 commentaires

16
votes

Edit: Ajout de la vérification de la différence exactement 180 degrés. Auparavant, cela retournait 180 ou -180 selon que la finale était supérieure ou inférieure à celle initiale. Je l'ai modifié afin qu'il revienne positive 180 dans les deux cas.


alors voici ma tentative ... xxx


2 commentaires

Vraiment utile: j'ai lutté avec cela pendant un moment.


Cela n'a pas fonctionné pour moi lorsque les rubriques étaient proches de 0. Voir ma solution ci-dessous, qui est basée sur Cette réponse d'avionique < / a>.



2
votes

Si je comprends la question correctement, je pense que le code suivant devrait fonctionner: xxx

essentiellement, je traite 360 ​​degrés de la même manière que 0, ce qui, à mon avis, c'est d'accord. Ce code produira les mêmes résultats que ceux énumérés dans le tableau ci-dessus. Le code ne fait pas la vérification des limites, il s'attend à des valeurs comprises entre 0 et 360.


0 commentaires

1
votes
Degree_Diff = (MIN(ABS(ENDCOMPASS-STARTCOMPASS),ABS(360-ENDCOMPASS+STARTCOMPASS),ABS(360-STARTCOMPASS+ENDCOMPASS))) 

1 commentaires

Bienvenue à Stackoverflow! Il est toujours préférable de fournir une brève description pour un exemple de code pour améliorer la précision post :)