我在一些基本的触发方面遇到了一些麻烦。我正在做一些数学作业,我终于厌倦了将直角坐标转换为极坐标,反之亦然,所以我决定编写一个小 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/