2010-04-09 3 views
0

Que remplit la fonction suivante?Aide Description de la fonction

public static double CleanAngle(double angle) { 

     while (angle < 0) 
      angle += 2 * System.Math.PI; 

     while (angle > 2 * System.Math.PI) 
      angle -= 2 * System.Math.PI; 

     return angle; 
    } 

Voici comment il est utilisé avec ATan2. Je crois que les valeurs réellement transmises à ATan2 sont toujours positives.

static void Main(string[] args) { 
     int q = 1; 
     //'x- and y-coordinates will always be positive values 
     //'therefore, do i need to "clean"? 
     foreach (Point oPoint in new Point[] { new Point(8,20), new Point(-8,20), new Point(8,-20), new Point(-8,-20)}) { 
      Debug.WriteLine(Math.Atan2(oPoint.Y, oPoint.X), "unclean " + q.ToString()); 
      Debug.WriteLine(CleanAngle(Math.Atan2(oPoint.Y, oPoint.X)), "cleaned " + q.ToString());     
      q++; 
     } 

     //'output 
     //'unclean 1: 1.19028994968253 
     //'cleaned 1: 1.19028994968253 
     //'unclean 2: 1.95130270390726 
     //'cleaned 2: 1.95130270390726 
     //'unclean 3: -1.19028994968253 
     //'cleaned 3: 5.09289535749705 
     //'unclean 4: -1.95130270390726 
     //'cleaned 4: 4.33188260327232 

    } 
MISE À JOUR

Merci à tous pour vos réponses. Pour chaque réponse, il y a une autre question. Pourquoi voudraient-ils «normaliser» l'angle? Voici la partie du code.

 double _theta = Math.ATan2(oEnd.Y - _start.Y, oEnd.X - _start.X); 

     Point oCenter = new Point(); 
     oCenter.X = (int)(_start.X + _distanceTravelled * Math.Cos(_theta)); 
     oCenter.Y = (int)(_start.Y + _distanceTravelled * Math.Sin(_theta)); 

     //'move barrage 
     this.Left = oCenter.X - this.Width/2; 
     this.Top = oCenter.Y - this.Height/2; 

Répondre

1

Que remplit la fonction suivante?

Il est une façon très lente de forcer un angle (en radians) à écrire de 0 à 2π

Pourquoi seraient-ils « normaliser » l'angle?

Parce que ATan() renvoie un angle entre -π et π, et ils le voulaient entre 0 et 2π.

Si tel est le seul code qui utilise CleanAngle, il n'est pas nécessaire en raison de l'identité

Cos(θ) = Cos(θ-2π) 
Sin(θ) = Sin(θ-2π) 
+0

Merci beaucoup. Vos "identités" l'expliquent bien. –

2

Il normes un angle dans radians de sorte qu'il est dans l'intervalle [0..2pi]. 2pi est un cercle complet et donc un angle x est égal à l'angle x+2pi, x+4pi, x+6pi ...

0

Il normalise un angle mesuré en radians dans la gamme de 0 à 2 pi.

1

Le procédé convertit un angle en l'angle équivalent dans la plage 0..pi * 2.

Si vous ne passez des valeurs positives que dans la méthode Atan2, vous obtenez uniquement un angle pour le premier quadrant, c'est-à-dire dans la plage 0..pi/2. Ainsi, vous n'avez pas besoin de normaliser l'angle.