极坐标到笛卡尔返回奇怪的结果
Polar to Cartesian returning strange results
我不确定是我的数学还是我的 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)... 等等。仅通过这三个示例,您就可以看到笛卡尔点已经跳到一个完全不同的象限,然后又跳回来。即使我关于旋转方向或起点的想法完全错误,我仍然希望每个点从 0 度起点顺时针或逆时针旋转顺序。另外,您可以从 "square" 角度 90 和 180 看出笛卡尔点相对于 (0,0) 中心点远非完全水平或垂直?
看起来 numpy 以弧度而不是度数工作
numpy 的 sin()
和 cos()
函数以弧度而不是度数作为输入。将度数转换为弧度应该可以解决您的问题。
您的代码很好,唯一的问题是 numpy.cos(angle) 以弧度而不是度数作为参数。您可以将测试仪更改为从 0 到 2*numpy.pi
的范围,或者通过在第 2 行添加 angle = 180*angle/numpy.pi
将度数转换为弧度。
我不确定是我的数学还是我的 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)... 等等。仅通过这三个示例,您就可以看到笛卡尔点已经跳到一个完全不同的象限,然后又跳回来。即使我关于旋转方向或起点的想法完全错误,我仍然希望每个点从 0 度起点顺时针或逆时针旋转顺序。另外,您可以从 "square" 角度 90 和 180 看出笛卡尔点相对于 (0,0) 中心点远非完全水平或垂直?
看起来 numpy 以弧度而不是度数工作
numpy 的 sin()
和 cos()
函数以弧度而不是度数作为输入。将度数转换为弧度应该可以解决您的问题。
您的代码很好,唯一的问题是 numpy.cos(angle) 以弧度而不是度数作为参数。您可以将测试仪更改为从 0 到 2*numpy.pi
的范围,或者通过在第 2 行添加 angle = 180*angle/numpy.pi
将度数转换为弧度。