本篇内容主要讲解“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 求两个向量的顺时针夹角怎么做”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。