python - 基本触发 : math. atan() 问题

标签 python trigonometry

我在一些基本的触发方面遇到了一些麻烦。我正在做一些数学作业,我终于厌倦了将直角坐标转换为极坐标,反之亦然,所以我决定编写一个小 Python 程序来帮助我进行转换。但是, Math.atan() 给我带来了一点麻烦。这是代码:

def rect_to_polar_input(x, y):
    hypotenuse = math.sqrt((x * x) + (y * y))
    tangent = float(y / x);
    angle = round(math.degrees(math.atan(tangent)));

    if x <= 0:
        if(y >=0):
            angle += 90

        if(y <= 0):
            angle+= 180

    if x >= 0:
        if(y<0):
            angle+=270

    return hypotenuse, angle

如果您想知道为什么我有那些笨拙的 if 语句,那是为直角坐标所在的象限添加正确的角度。象限 2 与象限 1 成 90 度角, 象限 3 与象限 1 成 180 度,等等。

现在,如果我输入像 (5, 5) 这样的值,一切都会按预期进行。但是,如果我输入 (-5, 5),我得到的值是 7.07, 45,我应该得到 7.07, 135 .如果我输入 (-5, -5),我得到的值是 7.07, 225,这是预期的。最后,如果我输入值 (5, -5),我仍然得到值 7.07, 225。我已经尝试了我能想到的一切,但它没有用。那么,我错过了什么?

最佳答案

你应该为此使用atan2。它完全按照您的需要处理象限。像这样:

def rect_to_polar_input(x, y):
    hypotenuse = math.hypot(x, y)
    angle = round(math.degrees(math.atan2(y, x)))
    if angle<0:
        angle += 360
    return hypotenuse, angle

if 语句用于处理您希望结果在 0..360 范围内的事实,但是 atan2 给出的角度在 -180..180 范围内.

您可以使用您已采用的基本方法通过 atan 完成此操作,但您还没有完全调试它。无论如何,每个人都为此使用 atan2

此外,您也可以使用 hypot 而不是自己滚动。

关于python - 基本触发 : math. atan() 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9624515/

相关文章:

java - java中的台球游戏如何放入15个球

java - 计算圆上一点的切线?

python - unsigned char* 图像到 Python

python - 使用python通过FTP下载大文件

math - 反射?我该怎么做?

c++ - 从 sin(a) 获得 cos(a) 的最佳方法

python - 如何在 python 中展平嵌套列表?

python - PyQt 应用程序在 Linux 上卡住屏幕,在 Windows 上正常

python - 如何在 Python 中提取 mongoDB 文档的最后一个 objectID?

javascript - Angular 方向正弦波