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 相关文章推荐
使用python3.5仿微软记事本notepad
Jun 15 Python
Python数据结构与算法之字典树实现方法示例
Dec 13 Python
Python获取指定字符前面的所有字符方法
May 02 Python
python matlibplot绘制多条曲线图
Feb 19 Python
从DataFrame中提取出Series或DataFrame对象的方法
Nov 10 Python
Python matplotlib的使用并自定义colormap的方法
Dec 13 Python
python自动发送测试报告邮件功能的实现
Jan 22 Python
Python中最大递归深度值的探讨
Mar 05 Python
python之array赋值技巧分享
Nov 28 Python
python2和python3哪个使用率高
Jun 23 Python
pyqt5 textEdit、lineEdit操作的示例代码
Aug 12 Python
Django如何继承AbstractUser扩展字段
Nov 27 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
比特率,大家看看这个就不用收音机音质去比MP3音质了
2021/03/01 无线电
在任意字符集下正常显示网页的方法二(续)
2007/04/01 PHP
php一些公用函数的集合
2008/03/27 PHP
php网站来路获取代码(针对搜索引擎)
2010/06/08 PHP
php动态实现表格跨行跨列实现代码
2012/11/06 PHP
php PDO属性设置与操作方法分析
2018/12/27 PHP
jQuery使用手册之 事件处理
2007/03/24 Javascript
js操作二级联动实现代码
2010/07/27 Javascript
理解Javascript_05_原型继承原理
2010/10/13 Javascript
jquery easyui中treegrid用法的简单实例
2014/02/18 Javascript
jquery列表拖动排列(由项目提取相当好用)
2014/06/17 Javascript
全面解析Bootstrap表单使用方法(表单控件)
2015/11/24 Javascript
Bootstrap基本样式学习笔记之图片(6)
2016/12/07 Javascript
jquery判断页面网址是否有效的两种方法
2016/12/11 Javascript
angular实现表单验证及提交功能
2017/02/01 Javascript
解决vue单页面应用中动态修改title问题
2019/06/09 Javascript
JavaScript链式调用原理与实现方法详解
2020/05/16 Javascript
OpenLayers3实现对地图的基本操作
2020/09/28 Javascript
解决新建一个vue项目过程中遇到的问题
2020/10/22 Javascript
[01:18:31]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第一场 1月10日
2021/03/11 DOTA
python3使用PyMysql连接mysql数据库实例
2017/02/07 Python
python实现淘宝秒杀聚划算抢购自动提醒源码
2020/06/23 Python
Pandas-Cookbook 时间戳处理方式
2019/12/07 Python
python实现udp聊天窗口
2020/03/31 Python
浅谈python多线程和多线程变量共享问题介绍
2020/04/17 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
2020/04/20 Python
浅析Python面向对象编程
2020/07/10 Python
说出ArrayList,Vector, LinkedList的存储性能和特性
2015/01/04 面试题
《新型玻璃》教学反思
2014/04/13 职场文书
机电专业毕业生求职信
2014/07/01 职场文书
爬山的活动方案
2014/08/16 职场文书
副校长个人对照检查材料思想汇报
2014/10/04 职场文书
幼儿园国庆节活动总结
2015/03/23 职场文书
2016大学军训心得体会
2016/01/11 职场文书
mysql批量新增和存储的方法实例
2021/04/07 MySQL
MySQL 发生同步延迟时Seconds_Behind_Master还为0的原因
2021/06/21 MySQL