python如何求两个向量的夹角
Admin 2021-04-28 群英技术资讯 3089 次浏览
python如何求两个向量夹角?如下图所示我们想要求两个向量的顺时针夹角,那么我们要怎么样做呢?有什么方法?这篇文件就给大家介绍 python如何计算两向量的顺时针夹角,感兴趣的朋友就继续看吧。

以上述图片举例,要求
相对
的顺时针夹角。注意:这里使用图像坐标系
1 定义求顺时针角度的函数
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
2 求
, 然后求夹角 
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

补充:求2个向量顺逆时针(最小角度)旋转角度 Python
求向量 a 旋转到向量 b 的顺时针(逆时针)最小角度。正常求2个向量夹角用内积公式就可以计算,然而求得的结果不包含方向信息。如果需要方向信息的话需要引入向量的外积来帮助我们判断。

theta是两个向量的夹角,n是垂直与2维平面的方向向量,由右手定则可以判断方向。根据定义可以通过向量的坐标计算外积

这里面由于u,v是二维平面上的向量, u3 v3 都为0。 所以 u叉乘v = (u1v2 - u2v1)*K。所以等式两边的标量相等可以求夹角rho。rho 是带正负号的和旋转方向有关,但是范围在 -90 ~ 90度。可以通过rho正负号,结合向量的点乘重新计算带方向的夹角。
这里面顺时针旋转为负,逆时针旋转为正。
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求两个向量夹角的介绍,上述代码仅供参考,希望对大家有帮助,更多python求两个向量夹角内容大家可以继续浏览其他文章。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
Python邮件处理怎样实现?对于邮件处理是比较常见的需求,下面小编就给大家介绍一下使用Python实现邮件处理的操作,下面示例具有一定的参考价值,感谢的朋友可以参考了解看看
分组统计在很多时候都需要用到,可以实现很多数据库函数的功能。本文主要介绍了python中pandas对多列进行分组统计的实现,感兴趣的可以了解一下
Pandas包的merge、join、concat方法可以完成数据的合并和拼接,本文主要介绍了这三种实现方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Python中没有报错提示,其中使用了 try-except-else 的代码块,except是try代码中错误时执行,而except中的代码是pass,也就是在try中代码错误时候直接pass,不给用户编写任何的建议和help。
这篇文章主要介绍了python中jieba模块的深入了解,jieba模块是一个python第三方中文分词模块,可以用于将语句中的中文词语分离出来
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008