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运行效率的方法之间的对比
Apr 03 Python
Python StringIO模块实现在内存缓冲区中读写数据
Apr 08 Python
使用Python生成url短链接的方法
May 04 Python
Python  pip安装lxml出错的问题解决办法
Feb 10 Python
python3.6利用pyinstall打包py为exe的操作实例
Oct 31 Python
Python使用while循环花式打印乘法表
Jan 28 Python
python Matplotlib底图中鼠标滑过显示隐藏内容的实例代码
Jul 31 Python
python自动循环定时开关机(非重启)测试
Aug 26 Python
使用tkinter实现三子棋游戏
Feb 25 Python
Python自然语言处理之切分算法详解
Apr 25 Python
Pytorch中的数据集划分&正则化方法
May 27 Python
Python语法学习之进程的创建与常用方法详解
Apr 08 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
PHP实现生成带背景的图形验证码功能
2016/10/03 PHP
php显示页码分页类的封装
2017/06/08 PHP
在thinkphp5.0路径中实现去除index.php的方式
2019/10/16 PHP
jquery实现table鼠标经过变色代码
2013/09/25 Javascript
JS二维数组的定义说明
2014/03/03 Javascript
JavaScript Promise启示录
2014/08/12 Javascript
js生成的验证码的实现与技术分析
2014/09/17 Javascript
javascript实现类似百度分享功能的方法
2015/07/27 Javascript
jquery实现简洁文件上传表单样式
2015/11/02 Javascript
jQuery实现底部浮动窗口效果
2016/09/07 Javascript
基于js实现的限制文本框只可以输入数字
2016/12/05 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的三大方法
2017/01/22 Javascript
Vue常用指令V-model用法
2017/03/08 Javascript
vue cli构建的项目中请求代理与项目打包问题
2018/02/26 Javascript
Vue使用screenfull实现全屏效果
2020/09/17 Javascript
[01:03:59]2018DOTA2亚洲邀请赛3月30日 小组赛B组VGJ.T VS Secret
2018/03/31 DOTA
[01:54]TI珍贵瞬间系列(五):压力
2020/08/29 DOTA
python自动安装pip
2014/04/24 Python
浅谈Python数据类型之间的转换
2016/06/08 Python
基于python中的TCP及UDP(详解)
2017/11/06 Python
Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
2018/02/13 Python
Python系统监控模块psutil功能与经典用法分析
2018/05/24 Python
python实现密码强度校验
2020/03/18 Python
Python 实现微信自动回复的方法
2020/09/11 Python
HTML5 placeholder属性详解
2016/06/22 HTML / CSS
html5将图片转换成base64的实例代码
2016/09/21 HTML / CSS
印尼购物网站:iLOTTE
2019/10/16 全球购物
Java的基础面试题附答案
2016/01/10 面试题
武汉东之林科技有限公司机试
2013/09/17 面试题
销售顾问的岗位职责
2013/11/13 职场文书
对教师的评语
2014/04/28 职场文书
物业管理委托协议(2篇)
2014/09/23 职场文书
四风问题个人剖析材料
2014/10/07 职场文书
2014年幼儿园班级工作总结
2014/12/17 职场文书
用Python爬取某乎手机APP数据
2021/06/15 Python
oracle删除超过N天数据脚本的方法
2022/02/28 Oracle