python 求两个向量的顺时针夹角操作
作者:baoxin1100 时间:2021-05-26 13:31:10
以上述图片举例,要求 相对
的顺时针夹角。注意:这里使用图像坐标系
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)
'''
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。
来源:https://blog.csdn.net/baoxin1100/article/details/110916354
标签:python,向量,顺时针,夹角
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
兼容低版本 IE 的 JScript 5.5 实现
2008-07-01 12:48:00
Python判断某个用户对某个文件的权限
2023-12-15 01:25:27
python控制nao机器人身体动作实例详解
2023-08-26 11:33:17
pytest实现多进程与多线程运行超好用的插件
2023-03-23 15:56:23
![](https://img.aspxhome.com/file/2023/0/99510_0s.jpg)
golang时间/时间戳的获取与转换实例代码
2023-09-02 06:04:43
pyqt5圆形label显示打开的摄像头功能
2022-09-16 04:10:21
![](https://img.aspxhome.com/file/2023/9/95719_0s.png)
JavaScript中实现字符串的取左取右(实现left和right功能)
2009-07-20 12:39:00
MySQL的存储过程写法和Cursor的使用
2008-12-03 15:55:00
重新认识ASP之后的我在想"是时候改变了"
2008-05-08 13:10:00
python自定义封装带颜色的logging模块
2022-06-17 04:23:48
![](https://img.aspxhome.com/file/2023/9/95669_0s.jpg)
Python实现矩阵加法和乘法的方法分析
2023-07-30 09:39:06
Python实现邮件的批量发送的示例代码
2023-08-09 07:47:57
PLSQL导入dmp文件的详细完整步骤
2023-06-26 11:45:32
![](https://img.aspxhome.com/file/2023/6/63716_0s.png)
python数字图像处理之骨架提取与分水岭算法
2023-03-07 15:59:50
![](https://img.aspxhome.com/file/2023/9/97609_0s.png)
Python一行代码快速实现程序进度条示例
2022-07-07 07:22:26
![](https://img.aspxhome.com/file/2023/0/104920_0s.png)
Python3.5 Json与pickle实现数据序列化与反序列化操作示例
2022-04-08 17:53:55
![](https://img.aspxhome.com/file/2023/1/102721_0s.png)
对于Python异常处理慎用“except:pass”建议
2023-01-30 02:30:44
python类和继承用法实例
2021-07-24 17:31:30
如何在vscode中安装python库的方法步骤
2021-01-15 05:49:22
![](https://img.aspxhome.com/file/2023/6/93546_0s.png)
使用Python编程分析火爆全网的鱿鱼游戏豆瓣影评
2023-10-11 00:35:26
![](https://img.aspxhome.com/file/2023/7/75227_0s.png)