我有代码,其中您给了2个点a(x1,y1)和b(x2,y2),以便它计算它们之间的(α)角度,如下图所示:

python - 用于计算角度值的代码-LMLPHP

我尝试使用此:angle = math.degrees(math.atan2((x1 - x2),(y1 - y2)))
计算角度,但是当下图中的角度坐标是这样时,它不会给出正确的值:

python - 用于计算角度值的代码-LMLPHP

我需要一个在给定坐标的情况下始终可以获取角度准确值的函数

y2可以大于或小于y1,但x2应始终大于x1

最佳答案

您的问题有三个困难。在大多数类似的问题中,都希望光线从(x1,y1)到(x2,y2)的角度,但是您的问题是另一个方向。另一个困难是您想要从负y轴顺时针旋转的角度,但是标准三角函数使用从正x轴逆时针旋转的角度。第三个困难是atan2函数有时返回负角度值,但是您只需要正值。

这是解决问题的最短单线解决方案:

degrees(atan2(x2 - x1, y2 - y1))


通过从通常在atan2函数中使用的方式交换y和x并采用参数的负数来工作。这会将点(和整个平面)翻转到atan2函数照常工作的位置。请注意,如果x1> x2,结果将为负。

这是一些测试代码:

print('Straight down zero:', anglealpha(0, -1, 0, 0))
print('Straight up 180:   ', anglealpha(0, 1, 0, 0))
print('Straight left 90:  ', anglealpha(-1, 0, 0, 0))
print('Down left 45:      ', anglealpha(-1, -1, 0, 0))
print('Up left 135:       ', anglealpha(-1, 1, 0, 0))


给出结果:

Straight down zero: 0.0
Straight up 180:    180.0
Straight left 90:   90.0
Down left 45:       45.0
Up left 135:        135.0

关于python - 用于计算角度值的代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42875090/

10-12 23:53