【问题标题】:Polar to Cartesian returning strange results极地到笛卡尔返回奇怪的结果
【发布时间】:2016-07-31 03:24:06
【问题描述】:

我不确定是我的数学还是我的 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) 中心点远非完全水平或垂直?

【问题讨论】:

    标签: python python-2.7 math coordinates polar-coordinates


    【解决方案1】:

    看起来 numpy 是以弧度而不是度数工作的

    【讨论】:

    • 啊谢谢杰里米。谢谢大家:勾选第一个:)
    【解决方案2】:

    numpy 的sin()cos() 的函数以弧度而不是度数为单位进行输入。将度数转换为弧度应该可以解决您的问题。

    【讨论】:

      【解决方案3】:

      您的代码很好,唯一的问题是 numpy.cos(angle) 以弧度而不是度数为参数。您可以将测试仪更改为从 0 到 2*numpy.pi 的范围,或者通过在第 2 行添加 angle = 180*angle/numpy.pi 将度数转换为弧度。

      【讨论】:

        猜你喜欢
        • 2012-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-04
        • 2015-05-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多