计算三点之间的角度,但只在蟒蛇中逆时针计算

时间:2016-05-26 11:08:24

标签: python math angle

所以我试图计算三点之间的角度。例如

#create vectors
ba = a - b
bc = c- b
# calculate angle
cosine_angle = numpy.dot(ba,bc) / (numpy.linalg.norm(ba) * numpy.linalg.norm(bc))

angle = numpy.arccos(cosine_angle) 
pAngle = numpy.degrees(angle)

说我想计算ABC之间的角度我使用下面的代码

<Grid x:Name="MainGrid3">

我的脚本运行并且输出角度有效,我的问题是当我想要计算BCD时我希望外面的角度而不是内部所以说而不是角度是120度我想要角度240.所以我只想要逆时针角度。

不确定如何获得这个值,有人能指出我正确的方向吗?

*编辑:在其他方面我想识别逆时针超过180度的角度

* edit2:重复的答案没有回答我的问题,因为我没有使用很多java所以不确定如何在python中编码

2 个答案:

答案 0 :(得分:1)

现在使用角余弦距离来计算两个矢量之间的角度非常好,但在你的情况下,最好使用评论中提到的反正切

现在假设您要计算BCD之间的逆时针角度,可以使用numpy的atan2函数来完成此操作。 atan2(x,y)会给出原点 y x 之间的角度。

import numpy as np

def calculate_angle(point_a, point_b):
    """ Calculate angle between two points """
    ang_a = np.arctan2(*point_a[::-1])
    ang_b = np.arctan2(*point_b[::-1])
    return np.rad2deg((ang_a - ang_b) % (2 * np.pi))

a = np.array([14, 140])
b = np.array([13, 120])
c = np.array([12, 130])
d = np.array([11, 110])

# create vectors
ba = a - b
bc = c - b
cd = d - c

# calculate angle
cosine_angle = np.dot(ba, bc) / (np.linalg.norm(ba) * np.linalg.norm(bc))

angle = np.arccos(cosine_angle)
inner_angle = np.degrees(angle)

print inner_angle  # 8.57299836361


# see how changing the direction changes the angle
print calculate_angle(bc, cd) # 188.572998364
print calculate_angle(cd, bc) # 171.427001636

答案 1 :(得分:0)

你可以计算内角,但你想要反转角度?为什么不只是计算360 - angle