python 求两个向量的顺时针夹角操作


Posted in Python onMarch 04, 2021

python 求两个向量的顺时针夹角操作

以上述图片举例,要求 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 求 python 求两个向量的顺时针夹角操作 , 然后求夹角 python 求两个向量的顺时针夹角操作

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 求两个向量的顺时针夹角操作

补充:求2个向量顺逆时针(最小角度)旋转角度 Python

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

正常求2个向量夹角用内积公式就可以计算,然而求得的结果不包含方向信息。

如果需要方向信息的话需要引入向量的外积来帮助我们判断。

python 求两个向量的顺时针夹角操作

theta是两个向量的夹角,n是垂直与2维平面的方向向量,由右手定则可以判断方向。

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

python 求两个向量的顺时针夹角操作

这里面由于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 相关文章推荐
python模拟登陆Tom邮箱示例分享
Jan 13 Python
Python实现抓取页面上链接的简单爬虫分享
Jan 21 Python
推荐11个实用Python库
Jan 23 Python
python学习笔记之调用eval函数出现invalid syntax错误问题
Oct 18 Python
Python使用Redis实现作业调度系统(超简单)
Mar 22 Python
Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例
Aug 31 Python
Python实现七彩蟒蛇绘制实例代码
Jan 16 Python
如何在python字符串中输入纯粹的{}
Aug 22 Python
Django模型修改及数据迁移实现解析
Aug 01 Python
Python第三方包之DingDingBot钉钉机器人
Apr 09 Python
Tensorflow--取tensorf指定列的操作方式
Jun 30 Python
浅析PyCharm 的初始设置(知道)
Oct 12 Python
python 制作磁力搜索工具
Mar 04 #Python
python抢购软件/插件/脚本附完整源码
Mar 04 #Python
Python 求向量的余弦值操作
Mar 04 #Python
django使用多个数据库的方法实例
Mar 04 #Python
Python使用paramiko连接远程服务器执行Shell命令的实现
Mar 04 #Python
Python 调用C++封装的进一步探索交流
Mar 04 #Python
使用Python webdriver图书馆抢座自动预约的正确方法
Mar 04 #Python
You might like
咖啡历史、消费和行业趋势
2021/03/03 咖啡文化
php中动态修改ini配置
2014/10/14 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
js变量以及其作用域详解
2020/07/18 Javascript
Jquery数字上下滚动动态切换插件
2015/08/08 Javascript
AngularJS基础教程之简单介绍
2015/09/27 Javascript
异步JS框架的作用以及实现方法
2015/10/29 Javascript
基于javascript实现右下角浮动广告效果
2016/01/08 Javascript
如何检测JavaScript的各种类型
2016/07/30 Javascript
JavaScript函数节流和函数防抖之间的区别
2017/02/15 Javascript
JS实现复制功能
2017/03/01 Javascript
详解js实时获取并显示当前时间的方法
2019/05/10 Javascript
JS中的一些常用的函数式编程术语
2019/06/15 Javascript
js的新生代垃圾回收知识点总结
2019/08/22 Javascript
layui+jquery支持IE8的表格分页方法
2019/09/28 jQuery
node.js Promise对象的使用方法实例分析
2019/12/26 Javascript
[01:08]DOTA2“血战之命”预告片
2017/08/12 DOTA
Python的加密模块md5、sha、crypt使用实例
2014/09/28 Python
python通过shutil实现快速文件复制的方法
2015/03/14 Python
基于python yield机制的异步操作同步化编程模型
2016/03/18 Python
Python 遍历子文件和所有子文件夹的代码实例
2016/12/21 Python
详解python 拆包可迭代数据如tuple, list
2017/12/29 Python
Python 循环语句之 while,for语句详解
2018/04/23 Python
在python里协程使用同步锁Lock的实例
2019/02/19 Python
python tornado修改log输出方式
2019/11/18 Python
python上传时包含boundary时的解决方法
2020/04/08 Python
python判断一个变量是否已经设置的方法
2020/08/13 Python
sqlalchemy实现时间列自动更新教程
2020/09/02 Python
小学运动会入场式解说词
2014/02/18 职场文书
马智宇结婚主持词
2014/04/01 职场文书
小学数学教研活动总结
2014/07/01 职场文书
淘宝客服工作职责
2014/07/11 职场文书
2014年电话销售工作总结
2014/12/01 职场文书
感谢信格式范文
2015/01/22 职场文书
2015年中秋晚会主持稿
2015/07/30 职场文书
python3.9之你应该知道的新特性详解
2021/04/29 Python