获取穿过两个点的线与 X 轴形成的精确角度

问题描述 投票:0回答:1

我使用 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 和数学库。现在正在为此安静地挣扎一段时间。任何帮助将不胜感激。谢谢你。

python math geometry trigonometry
1个回答
0
投票

([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 附近的值是正确的大概值。我认为没有理由认为您的代码正在计算该输入的错误答案。

© www.soinside.com 2019 - 2024. All rights reserved.