计算三点之间的角度但仅逆时针 python
calculating angle between three points but only anticlockwise in python
所以我正在尝试计算三点之间的角度。例如
a = [14, 140]
b = [13, 120]
c = [12, 130]
d = [11, 110]
|
| c a
|
| d b
|____________
假设我想计算 ABC 之间的角度,我使用以下代码
#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)
我的脚本运行并且输出角度有效,但我的问题是当我想计算 BCD 我想要外部而不是内部的角度所以说而不是 120 度的角度我想要 240 度的角度。所以我只想要逆时针角度。
不确定如何获得这个值,任何人都可以指出正确的方向吗?
*编辑:换句话说,我想识别逆时针超过 180 度的角度
*edit2:重复的答案没有回答我的问题,因为我没有使用很多 java,所以不确定如何在 python
中编码
你可以计算出内角,但你想要倒转的角度?为什么不只计算 360 - angle
现在使用 angular 余弦距离 来计算两个向量之间的角度是相当不错的,但在你的情况下,使用 可能会更好如评论中所述,反正切。
现在假设你想计算 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
所以我正在尝试计算三点之间的角度。例如
a = [14, 140]
b = [13, 120]
c = [12, 130]
d = [11, 110]
|
| c a
|
| d b
|____________
假设我想计算 ABC 之间的角度,我使用以下代码
#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)
我的脚本运行并且输出角度有效,但我的问题是当我想计算 BCD 我想要外部而不是内部的角度所以说而不是 120 度的角度我想要 240 度的角度。所以我只想要逆时针角度。
不确定如何获得这个值,任何人都可以指出正确的方向吗?
*编辑:换句话说,我想识别逆时针超过 180 度的角度
*edit2:重复的答案没有回答我的问题,因为我没有使用很多 java,所以不确定如何在 python
中编码你可以计算出内角,但你想要倒转的角度?为什么不只计算 360 - angle
现在使用 angular 余弦距离 来计算两个向量之间的角度是相当不错的,但在你的情况下,使用 可能会更好如评论中所述,反正切。
现在假设你想计算 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