简体   繁体   中英

Polar to Cartesian returning strange results

I'm not sure if it's my maths or my Python which isn't up to scratch... but the code below is giving unexpected results. It still plots a circle of points, but in a strange order and a non-uniform manner (even allowing for int rounding errors) ie the points aren't sequential around the circle as degree increases, they jump to entirely different points on the circle?

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"

A sample of the result:

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°

If 0 degrees = (50,0) then I would expect 10 degrees to be around (49,9) not (-41,-27). And i'd expect 20 degrees to be ~(47,18) not (20,45)... etc. Just with those three examples you can see the Cartesian point has jumped to a completely different quadrant then back again. Even if my ideas about rotation direction, or starting point are completely wrong, I still expect each point to be rotationally sequential either clockwise or anti-clockwise from the 0 degree start point. Plus you can tell from the "square" angles 90 and 180 that the Cartesian point is far from perfectly horizontal or vertical in relation to a (0,0) central point?

看起来像numpy工作在弧度,而不是度

The functions of sin() and cos() of numpy take inputs in radians instead of degrees. Converting the degrees to radians should solve your problem.

Your code is fine, only problem is that the numpy.cos(angle) takes its argument in radians, not degrees. You can either change the tester to range from 0 to 2*numpy.pi or convert the degrees to radians by adding angle = 180*angle/numpy.pi on line 2.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM