2010-04-09 2 views
0

Что выполняет следующая функция?Справка Понимание функции

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

Вот как он используется с ATan2. Я считаю, что фактические значения, переданные в ATan2, всегда положительны.

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 

    } 
UPDATE

Спасибо всем за ваши ответы. Для каждого ответа возникает другой вопрос.

Почему они «нормализуют» угол? Вот часть кода.

 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; 

ответ

1

Что выполняет следующая функция?

Это очень медленный способ заставить угол (в радианах), чтобы записать от 0 до 2я

Почему бы они были «нормализующий» угол?

Потому что ATan() возвращает угол между -π и π, и они хотели его между 0 и 2π.

Если это единственный код, который использует CleanAngle, то он не нужен, потому что тождеств

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

большое спасибо. Ваши «личности» объяснили это красиво. –

2

Это норма угла в radians так, что она находится в интервале [0..2pi]. 2pi является полным кругом и, следовательно, угол x равен углами x+2pi, x+4pi, x+6pi ...

0

Нормализует угол, измеренный в радианах в диапазон от 0 до 2 Pi.

1

Метод преобразует угол в эквивалентный угол в диапазоне 0..pi * 2.

Если вы положите только положительные значения в метод Atan2, вы получите только угол для первого квадранта, то есть в диапазоне 0..pi/2. Таким образом, вам не нужно нормализовать угол.

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