gpt4 book ai didi

python - 计算两点之间的角度(顺时针)

转载 作者:太空狗 更新时间:2023-10-29 17:10:32 27 4
gpt4 key购买 nike

我已经很长时间没有使用数学了,这应该是一个简单的问题。

假设我有两个点 A:(1, 0) 和 B:(1, -1)。

我想使用一个程序(Python 或任何编程语言)来计算 A、原点 (0, 0) 和 B 之间的顺时针角度。它将是这样的:

angle_clockwise(point1, point2)

请注意,参数的顺序很重要。由于角度计算是顺时针的:

  • 如果我调用 angle_clockwise(A, B),它返回 45。
  • 如果我调用 angle_clockwise(B, A),它返回 315。

换句话说,算法是这样的:

  1. 在第一个点参数与 (0, 0) 之间画一条线(第 1 行)。
  2. 在第二个点参数与 (0, 0) 之间画一条线(第 2 行)。
  3. 将第 1 行绕 (0, 0) 顺时针旋转直到与第 2 行重叠。
  4. 线 1 行进的角距离将是返回的角度。

有什么方法可以解决这个问题吗?

最佳答案

Numpy 的 arctan2(y, x)将计算原点和点 (x, y) 之间的逆时针角度(介于 -π 和 π 之间的弧度值)。

您可以对点 AB 执行此操作,然后从第一个角度减去第二个角度以获得带符号的顺时针角度差。这个差异将在 -2π 和 2π 之间,因此为了获得 0 和 2π 之间的正角度,您可以对 2π 取模。最后,您可以使用 np.rad2deg 将弧度转换为度数.

import numpy as np

def angle_between(p1, p2):
ang1 = np.arctan2(*p1[::-1])
ang2 = np.arctan2(*p2[::-1])
return np.rad2deg((ang1 - ang2) % (2 * np.pi))

例如:

A = (1, 0)
B = (1, -1)

print(angle_between(A, B))
# 45.

print(angle_between(B, A))
# 315.

如果你不想使用 numpy,你可以使用 math.atan2代替 np.arctan2,并使用 math.degrees (或乘以 180/math.pi)以将弧度转换为度数。 numpy 版本的一个优点是您还可以为 p1p2 传递两个 (2, ...) 数组以计算以矢量化方式计算多对点之间的角度。

关于python - 计算两点之间的角度(顺时针),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31735499/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com