2016-07-31 5 views
2

私の数学であるか、または傷つきにくい私のPythonであるかはわかりませんが、以下のコードは予期しない結果を与えています。それでも点の円をプロットしますが、奇妙な順序と非一様な方法(intの丸め誤差を許容することさえできます)で、度が増すにつれて点が円の周りに連続しないので、円上の全く異なる点にジャンプします?奇妙な結果を返す極座標

def pol2cart(distance, angle): 
    x = distance * numpy.cos(angle) 
    y = distance * numpy.sin(angle) 
    return(x, y) 

for fixedangle in xrange(0,360,10): 
    x, y = pol2cart(50,fixedangle)  
    print str(int(x)) + ", " + str(int(y)) + " " + str(fixedangle) + "\xb0" 

結果のサンプル:

50, 0 0° 
-41, -27 10° 
20, 45 20° 
7, -49 30° 
-33, 37 40° 
48, -13 50° 
-47, -15 60° 
31, 38 70° 
-5, -49 80° 
-22, 44 90° 
43, -25 100° 
-49, -2 110° 
40, 29 120° 
-18, -46 130° 
-9, 49 140° 
34, -35 150° 
-48, 10 160° 
46, 17 170° 
-29, -40 180° 

0の場合度=(50,0)、私は10度の周りに(49,9)であることを期待しない(-41、-27 )。そして私は20度が〜(47,18)ではないと思います(20,45)...などです。これらの3つの例では、デカルト点が完全に異なる象限にジャンプしてから再び戻ることがわかります。回転方向や開始点についての私の考えが完全に間違っていても、0度の開始点から時計回りまたは反時計回りのいずれかの方向に回転するように各点が期待されます。さらに、「正方形」の角度90および180から、デカルト点は(0,0)中心点に対して完全に水平または垂直から遠く離れていることが分かります。 numpyのはラジアン代わりの度に入力を取るnumpyのラジアンではなく度

答えて

4

が見えます。度をラジアンに変換すると、問題が解決するはずです。

+0

aah thanks Jeremy。そして、すべてのおかげで:最初の1つを刻んで:) – Simon

2

sin()の機能とのcos()で働いているよう

2

あなたのコードは問題ありませんが、numpy.cos(angle)は度ではなくラジアンで引数をとることだけが問題です。 0〜2*numpy.piの範囲でテスターを変更するか、2行目にangle = 180*angle/numpy.piを追加して度をラジアンに変換することができます。