2016-07-31 6 views
2

Я не уверен, что это моя математика или мой Python, который не до нуля ... но приведенный ниже код дает неожиданные результаты. Он по-прежнему отображает круг точек, но в странном порядке и неравномерно (даже допуская ошибки округления округления), т. Е. Точки не являются последовательными по кругу по мере увеличения степени, они переходят в совершенно разные точки на круге ?Полярный к картезианскому возвращению странных результатов

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) ... и т. Д. Просто с этими тремя примерами вы можете видеть, что декартова точка переместилась в совершенно другой квадрант, а затем обратно. Даже если мои представления о направлении вращения или начальной точке полностью неправильны, я все же ожидаю, что каждая точка будет вращательно последовательной либо по часовой стрелке, либо против часовой стрелки от начальной точки 0 градусов. Кроме того, вы можете сказать с «квадратных» углов 90 и 180, что декартовская точка далека от совершенно горизонтальной или вертикальной относительно центральной точки (0,0)?

ответ

4

выглядит NumPy работает в радианах, а не градусах

+0

aah thanks Джереми. И спасибо всем: пометили первый :) – Simon

2

В функциях sin() и cos() из NumPy принимают входы в радианах вместо градусов. Преобразование градусов в радианы должно решить вашу проблему.

2

Ваш код в порядке, только проблема в том, что numpy.cos (angle) принимает свой аргумент в радианах, а не в градусах. Вы можете либо изменить тестер на диапазон от 0 до 2*numpy.pi, либо пересчитать градусы в радианы, добавив angle = 180*angle/numpy.pi в строке 2.