用于计算角度

时间:2017-03-18 13:39:55

标签: python math trigonometry angle

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

enter image description here

我尝试过使用此功能:angle = math.degrees(math.atan2((x1 - x2),(y1 - y2))) 计算角度但是当角度坐标如下图所示,它不会给出corrct值:

enter image description here

我需要一个能够在给定坐标

时始终获得角度精确值的函数

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

2 个答案:

答案 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)

似乎你正试图找到两条线之间的角度。线1在(X1,Y1)和(X2,Y2)之间,线2在(X2,Y2)和(X2,0)之间 - 因为它是垂直的。角度是两个斜率之间的差异。 第1行的斜率:(y2-y1)/(x2-x1)

你不能为第2行做这个。使用三角形规则,你可以找到线在X1处的角度,Y1将水平的X线从90减去它。减去这个从90岁开始。

对于你的第二个角度,它是相同的,但你不需要从90减去。我相信你可以将它转换为Python代码