python 求两个向量的顺时针夹角操作
以上述图片举例,要求
1定义求顺时针角度的函数
importnumpyasnp defclockwise_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=thetaiftheta>0else2*np.pi+theta returntheta
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是二维平面上的向量,u3v3都为0。所以u叉乘v=(u1v2-u2v1)*K。
所以等式两边的标量相等可以求夹角rho。
rho是带正负号的和旋转方向有关,但是范围在-90~90度。
可以通过rho正负号,结合向量的点乘重新计算带方向的夹角。
这里面顺时针旋转为负,逆时针旋转为正。
defGetClockAngle(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)) ifrho<0: return-theta else: returntheta 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) '''
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。