我有代码,其中您给了2个点a(x1,y1)和b(x2,y2),以便它计算它们之间的(α)角度,如下图所示:
我尝试使用此:angle = math.degrees(math.atan2((x1 - x2),(y1 - y2)))
计算角度,但是当下图中的角度坐标是这样时,它不会给出正确的值:
我需要一个在给定坐标的情况下始终可以获取角度准确值的函数
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/