我有代码,你给出2个点a(x1,y1)和b(x2,y2),以便计算它们之间的角度,如下图所示:
我尝试过使用此功能:angle = math.degrees(math.atan2((x1 - x2),(y1 - y2)))
计算角度但是当角度坐标如下图所示,它不会给出corrct值:
我需要一个能够在给定坐标
时始终获得角度精确值的函数y2可以大于或小于y1,但x2应始终大于x1
答案 0 :(得分:3)
你的问题有三个困难。在大多数类似的问题中,需要从(x1,y1)到(x2,y2)的光线角度,但你的问题是另一个方向。另一个困难是你想要从负y轴顺时针转动的角度,但是标准三角法使用从正x轴逆时针转动的角度。第三个难点是atan2
函数有时会返回负角度值,但您只需要正值。
以下是针对您的问题的最短的单行解决方案:
degrees(atan2(x2 - x1, y2 - y1))
这可以通过交换y和#x与atan2
函数中通常使用的方式,以及取参数的负数来实现。这会将点(和整个平面)翻转到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
答案 1 :(得分:0)
你不能为第2行做这个。使用三角形规则,你可以找到线在X1处的角度,Y1将水平的X线从90减去它。减去这个从90岁开始。
对于你的第二个角度,它是相同的,但你不需要从90减去。我相信你可以将它转换为Python代码