2016-07-31 8 views
2

Ich bin mir nicht sicher, ob es meine Mathematik oder meine Python ist, die nicht auf dem neuesten Stand ist ... aber der Code unten gibt unerwartete Ergebnisse. Es zeichnet immer noch einen Kreis von Punkten auf, aber in einer seltsamen Reihenfolge und einer ungleichmäßigen Weise (sogar unter Berücksichtigung von Int-Rundungsfehlern), dh die Punkte sind nicht sequentiell um den Kreis, wenn der Grad zunimmt, springen sie zu ganz unterschiedlichen Punkten auf dem Kreis ?Polar zu Cartesian seltsame Ergebnisse

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" 

Eine Probe des Ergebnisses:

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° 

Wenn 0 Grad = (50,0), dann würde ich 10 Grad erwarten, um (49,9) nicht zu sein (-41, -27). Und ich würde erwarten, dass 20 Grad ~ (47,18) und nicht (20,45) ... usw. sind. Nur mit diesen drei Beispielen kann man sehen, dass der kartesische Punkt in einen ganz anderen Quadranten gesprungen ist und dann wieder zurück. Selbst wenn meine Vorstellungen über die Drehrichtung oder den Startpunkt völlig falsch sind, erwarte ich immer noch, dass jeder Punkt vom 0 ° Startpunkt aus entweder im Uhrzeigersinn oder gegen den Uhrzeigersinn rotierend sequenziell ist. Außerdem können Sie anhand der "quadratischen" Winkel 90 und 180 feststellen, dass der kartesische Punkt in Bezug auf einen Mittelpunkt (0,0) nicht perfekt horizontal oder vertikal ist?

Antwort

4

sieht aus wie numpy wird in Radiant arbeiten, nicht Grad

+0

aah danke Jeremy. Und danke an alle: hat das erste angekreuzt :) – Simon

2

Die Funktionen von sin() und cos() von numpy Eingänge in Radiant nehmen statt Grad. Konvertieren der Grad in Radiant sollte Ihr Problem lösen.

2

Ihr Code ist in Ordnung, nur Problem ist, dass die numpy.cos (Winkel) sein Argument im Bogenmaß, nicht Grad. Sie können entweder den Tester in den Bereich von 0 bis 2*numpy.pi ändern oder die Grad in Radianten umwandeln, indem Sie angle = 180*angle/numpy.pi in Zeile 2 hinzufügen.

Verwandte Themen