我使用 atan2 函数得到错误的输出。
我有 2 个变量点,即 p1=(x1,y1) p2=(x2,y2)
angleFun(x1,y1,x2,y2):
dx=x2-x1
dy=y2-y1
radAngle = match.atan2(dy, dx)
degAngle = math.degrees(radAngle)
if degAngle<0:
degAngle+=360
print (angle)
现在此代码仅适用于 0 度和 90 度线,对于其他值它不能给出准确的值。
例如:
([0.49609900927256284, 0.5], [0.5039009907274372, 0.5]) 给出 00 角度。
([0.5, 0.506935094626555], [0.5, 0.49306490537344505]) 给出 270 度
但是
([0.4972415830032833, 0.5049038524386074], [0.5027584169967166, 0.4950961475613926]) 给出 299.357753543 度。
而它应该给出 315 或 -45 度。
实在无法理解,这是为什么。 0 和 90 以外的任何角度都会得到错误的值。严格来说是Python 和数学库。现在正在为此安静地挣扎一段时间。任何帮助将不胜感激。谢谢你。
([0.4972415830032833, 0.5049038524386074], [0.5027584169967166, 0.4950961475613926]) 给出 299.357753543 度。
而它应该给出 315 或 -45 度。
不,不应该。在这种情况下,
dx == 0.5027584169967166 - 0.4972415830032833 == 0.005516833993433334
dy == 0.4950961475613926 - 0.5049038524386074 == -0.009807704877214773
对于 +315 / -45 度,您需要
dx > 0
和 dy == -dx
。指定的输入不满足后一个条件。定性地,您会期望得到一个绝对值较小的结果,正如您所观察到的那样。当 dy
大约等于 -2 * dx
时,+300 / -60 附近的值是正确的大概值。我认为没有理由认为您的代码正在计算该输入的错误答案。