Python计算两个向量顺时针夹角的方法与实现

Noah
Noah
发布时间:2026-10-14| 6人浏览过
原创

本文介绍如何在Python中计算两个向量的顺时针夹角。通过结合内积公式与外积(叉乘)判断方向,利用numpy库实现角度计算。文章提供了完整的代码示例,解析了带符号角度的处理逻辑,并对比了不同旋转方向下的角度结果,适用于需要精确方向信息的几何计算场景。

图像坐标系下的向量顺时针夹角定义

参考上述图片示例,目标是计算向量 相对于向量 的顺时针夹角。请注意,此处采用的是图像坐标系。

定义顺时针角度计算函数

第一步:定义计算顺时针角度的函数。


import numpy as np
def clockwise_angle(v1, v2):
 x1,y1 = v1
 x2,y2 = v2
 dot = x1*x2+y1*y2
 det = x1*y2-y1*x2
 theta = np.arctan2(det, dot)
 theta = theta if theta>0 else 2*np.pi+theta
 return theta

第二步:求解向量 ,随后计算夹角 。


v1 = [2-0, 1-0] = [2,1]
v2 = [4-0, 5-0] = [4,5]
theta = clockwise_angle(v1,v2)
print(theta*180/np.pi) # 24.77

向量顺逆时针最小旋转角度计算原理

补充内容:使用Python计算两个向量之间顺逆时针的最小旋转角度。

我们需要求向量 a 旋转到向量 b 时的顺时针(或逆时针)最小角度。

通常计算两个向量的夹角可以直接使用内积公式,但该方法求得的结果不包含方向信息。

若需获取方向信息,则必须引入向量的外积(叉乘)来进行辅助判断。

设 theta 为两个向量的夹角,n 为垂直于二维平面的方向向量,其方向可通过右手定则确定。

根据定义,可以通过向量的坐标直接计算外积。

由于 u 和 v 是二维平面上的向量,它们的 z 分量 u3 和 v3 均为 0。因此,u 叉乘 v 的结果为 (u1v2 - u2v1)*K。

基于等式两边标量相等的原理,可以求解夹角 rho。

rho 是一个带正负号的值,与旋转方向相关,但其数值范围限制在 -90 到 90 度之间。

可以通过判断 rho 的正负号,并结合向量的点乘结果,重新计算带有方向信息的完整夹角。

在此约定中,顺时针旋转标记为负值,逆时针旋转标记为正值。

Python完整代码实现与测试


def GetClockAngle(v1, v2):
 # 2个向量模的乘积
 TheNorm = np.linalg.norm(v1)*np.linalg.norm(v2)
 # 叉乘
 rho = np.rad2deg(np.arcsin(np.cross(v1, v2)/TheNorm))
 # 点乘
 theta = np.rad2deg(np.arccos(np.dot(v1,v2)/TheNorm))
 if rho < 0:
  return - theta
 else:
  return theta
a = [0,1]
b = [1,0]
c = [-1,0]
d = [0, -1]
e = [-1, -1]
f = [1, -1]
g = [1, 1]
h = [-1, 1]
print(GetClockAngle(a,g), GetClockAngle(a,b), GetClockAngle(a,f), GetClockAngle(a,d), \
 GetClockAngle(a,e), GetClockAngle(a,c), GetClockAngle(a,h))
'''
结果
(-45.00000000000001, -90.0, -135.0, 180.0, 135.0, 90.0, 45.00000000000001)
'''

以上为个人经验分享,希望能为大家提供参考。欢迎大家多多支持本站。如有错误或未考虑周全之处,敬请指正。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。