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

2024-05-14 17:45:07 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我要计算三点之间的夹角。例如

a = [14, 140]
b = [13, 120]
c = [12, 130]
d = [11, 110]

|
|    c    a
|
|  d    b
|____________

假设我要计算ABC之间的夹角,我用下面的代码

^{pr2}$

我要的是,当我的输出角是120度的时候,我要计算的是,这个角度,我要的是,我要的,角度是120度。所以我只需要逆时针方向的角度。在

不知道如何得到这个值,谁能给我指出正确的方向吗?在

*编辑:换言之,我想确定逆时针方向超过180度的角度

*edit2:重复的答案不能回答我的问题,因为我没有使用过很多java,所以不知道如何用python编写


Tags: 答案代码编辑java方向角度abcpr2
2条回答

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

现在使用角余弦距离来计算两个向量之间的角度是相当好的,但是在您的例子中,使用反正切可能会更好,如注释中所述。在

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

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

相关问题 更多 >

    热门问题