2012-03-18 4 views
1

私はいくつかのOctaveコードをJavaに移植しようとしています。私は、私は、次の試行Octave's 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だから、それはatan2は、第二引数で割った最初の引数の商に、セル単位ATAN適用されるように思えるアウトしようとしています。私はJavaでこれをうまく利用しています。私はそれとは何のトレース何かのように、

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 

を取得

いるしかし、次のコードは、奇妙な何かを放つ...

y 
x 
theta = atan2(y,x) 
?私はシータの最初の細胞は〜0.785398であるべきだと思います。他の細胞も間違っているようです。私が逃したものはありますか?

答えて

0

私自身で答えを見つけました。 atan2は、単純にatanが細胞に適用されたものではありません。オペランドの符号も同様に重要です。詳細情報については

は、以下を参照してください。http://sunsite.univie.ac.at/textbooks/octave/octave_17.html

そして(私がやっているよう)を参照してください自分でatan2を実装する方法のために:それは考慮に象限を取るようhttp://en.wikipedia.org/wiki/Atan2

+0

です条件など:http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Math.html#atan2(double、double) – skytreader

0

ATAN2は静かATANではありません。

参照:http://en.wikipedia.org/wiki/Atan2

は、あなたの最初のケースは、あなたが_Java_でそれを実装したい場合、それはより多くを悩ま... Javaは本当に `atan2`機能を有していることが判明していない、さらにatan(x/y) - Pi