Странное поведение от atan2 Октавы - PullRequest
1 голос
/ 18 марта 2012

Я пытаюсь перенести некоторый код Octave на Java.Я пробую atan2, поэтому у меня есть следующие попытки

octave3.2:53> m1 = [1,2;3,4]
m1 =

   1   2
   3   4

octave3.2:54> m2=[5,6;7,8]
m2 =

   5   6
   7   8

octave3.2:55> atan2(m1,m2)
ans =

   0.19740   0.32175
   0.40489   0.46365

octave3.2:56> atan(1/5)
ans =  0.19740
octave3.2:57> atan(2/6)
ans =  0.32175
octave3.2:58> atan(3/7)
ans =  0.40489
octave3.2:59> atan(4/8)
ans =  0.46365

Так что мне кажется, что atan2 применяет atan по ячейкам, к частному из первого аргумента, деленному на второй аргумент.Я получил это хорошо на Java.Тем не менее, следующий фрагмент кода испускает что-то странное ...

y
x
theta = atan2(y,x) 

Для которого я получаю след вроде:

y =

  -0.50000  -0.50000  -0.50000  -0.50000  -0.50000  -0.50000  -0.50000  -0.50000  -0.50000  -0.50000
  -0.40000  -0.40000  -0.40000  -0.40000  -0.40000  -0.40000  -0.40000  -0.40000  -0.40000  -0.40000
  -0.30000  -0.30000  -0.30000  -0.30000  -0.30000  -0.30000  -0.30000  -0.30000  -0.30000  -0.30000
  -0.20000  -0.20000  -0.20000  -0.20000  -0.20000  -0.20000  -0.20000  -0.20000  -0.20000  -0.20000
  -0.10000  -0.10000  -0.10000  -0.10000  -0.10000  -0.10000  -0.10000  -0.10000  -0.10000  -0.10000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.10000   0.10000   0.10000   0.10000   0.10000   0.10000   0.10000   0.10000   0.10000   0.10000
   0.20000   0.20000   0.20000   0.20000   0.20000   0.20000   0.20000   0.20000   0.20000   0.20000
   0.30000   0.30000   0.30000   0.30000   0.30000   0.30000   0.30000   0.30000   0.30000   0.30000
   0.40000   0.40000   0.40000   0.40000   0.40000   0.40000   0.40000   0.40000   0.40000   0.40000

x =

  -0.50000  -0.40000  -0.30000  -0.20000  -0.10000   0.00000   0.10000   0.20000   0.30000   0.40000
  -0.50000  -0.40000  -0.30000  -0.20000  -0.10000   0.00000   0.10000   0.20000   0.30000   0.40000
  -0.50000  -0.40000  -0.30000  -0.20000  -0.10000   0.00000   0.10000   0.20000   0.30000   0.40000
  -0.50000  -0.40000  -0.30000  -0.20000  -0.10000   0.00000   0.10000   0.20000   0.30000   0.40000
  -0.50000  -0.40000  -0.30000  -0.20000  -0.10000   0.00000   0.10000   0.20000   0.30000   0.40000
  -0.50000  -0.40000  -0.30000  -0.20000  -0.10000   0.00000   0.10000   0.20000   0.30000   0.40000
  -0.50000  -0.40000  -0.30000  -0.20000  -0.10000   0.00000   0.10000   0.20000   0.30000   0.40000
  -0.50000  -0.40000  -0.30000  -0.20000  -0.10000   0.00000   0.10000   0.20000   0.30000   0.40000
  -0.50000  -0.40000  -0.30000  -0.20000  -0.10000   0.00000   0.10000   0.20000   0.30000   0.40000
  -0.50000  -0.40000  -0.30000  -0.20000  -0.10000   0.00000   0.10000   0.20000   0.30000   0.40000

theta =

  -2.35619  -2.24554  -2.11122  -1.95130  -1.76819  -1.57080  -1.37340  -1.19029  -1.03038  -0.89606
  -2.46685  -2.35619  -2.21430  -2.03444  -1.81577  -1.57080  -1.32582  -1.10715  -0.92730  -0.78540
  -2.60117  -2.49809  -2.35619  -2.15880  -1.89255  -1.57080  -1.24905  -0.98279  -0.78540  -0.64350
  -2.76109  -2.67795  -2.55359  -2.35619  -2.03444  -1.57080  -1.10715  -0.78540  -0.58800  -0.46365
  -2.94420  -2.89661  -2.81984  -2.67795  -2.35619  -1.57080  -0.78540  -0.46365  -0.32175  -0.24498
   3.14159   3.14159   3.14159   3.14159   3.14159   0.00000   0.00000   0.00000   0.00000   0.00000
   2.94420   2.89661   2.81984   2.67795   2.35619   1.57080   0.78540   0.46365   0.32175   0.24498
   2.76109   2.67795   2.55359   2.35619   2.03444   1.57080   1.10715   0.78540   0.58800   0.46365
   2.60117   2.49809   2.35619   2.15880   1.89255   1.57080   1.24905   0.98279   0.78540   0.64350
   2.46685   2.35619   2.21430   2.03444   1.81577   1.57080   1.32582   1.10715   0.92730   0.78540

Что с этим?Я думаю, что первая ячейка тета должна ~ 0,785398.Другие клетки тоже кажутся неправильными.Я что-то пропустил?

Ответы [ 2 ]

0 голосов
/ 18 марта 2012

Атан2 не тихий атан, поскольку учитывает квадрант.

см .: http://en.wikipedia.org/wiki/Atan2

Ваш первый случай atan(x/y) - Pi

0 голосов
/ 18 марта 2012

Нашел ответ самостоятельно. atan2 не просто atan применяется по клеткам. Знаки операндов также имеют значение.

Для получения дополнительной информации см .: http://sunsite.univie.ac.at/textbooks/octave/octave_17.html

А затем о том, как реализовать atan2 самостоятельно (как я делаю), см .: http://en.wikipedia.org/wiki/Atan2

...