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

作者:baoxin1100 时间:2021-05-26 13:31:10 

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

来源:https://blog.csdn.net/baoxin1100/article/details/110916354

标签:python,向量,顺时针,夹角
0
投稿

猜你喜欢

  • 兼容低版本 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
  • golang时间/时间戳的获取与转换实例代码

    2023-09-02 06:04:43
  • pyqt5圆形label显示打开的摄像头功能

    2022-09-16 04:10:21
  • 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
  • Python实现矩阵加法和乘法的方法分析

    2023-07-30 09:39:06
  • Python实现邮件的批量发送的示例代码

    2023-08-09 07:47:57
  • PLSQL导入dmp文件的详细完整步骤

    2023-06-26 11:45:32
  • python数字图像处理之骨架提取与分水岭算法

    2023-03-07 15:59:50
  • Python一行代码快速实现程序进度条示例

    2022-07-07 07:22:26
  • Python3.5 Json与pickle实现数据序列化与反序列化操作示例

    2022-04-08 17:53:55
  • 对于Python异常处理慎用“except:pass”建议

    2023-01-30 02:30:44
  • python类和继承用法实例

    2021-07-24 17:31:30
  • 如何在vscode中安装python库的方法步骤

    2021-01-15 05:49:22
  • 使用Python编程分析火爆全网的鱿鱼游戏豆瓣影评

    2023-10-11 00:35:26
  • asp之家 网络编程 m.aspxhome.com