python 求两个向量的顺时针夹角操作
作者:baoxin1100 发布时间:2021-05-26 13:31:10
标签: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 求 , 然后求夹角
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


猜你喜欢
- 存储过程中的TOP后跟一个变量会如何? Create proc getWorkPlan2 (@intCounter int ,@lngUse
- defer用于资源的释放,会在函数返回之前进行调用。如果有多个defer表达式,调用顺序类似于栈,越后面的defer表达式越先被调用。def
- 这篇文章主要介绍了Python中断多重循环的几种方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- 本文实例讲述了Python实现的朴素贝叶斯算法。分享给大家供大家参考,具体如下:代码主要参考机器学习实战那本书,发现最近老外的书确实比中国人
- 引言今天在使用Pytorch导入此前保存的模型进行测试,在过程中发现输出的结果与验证结果差距甚大,经过排查后发现是forward与eval(
- 本文介绍了PyTorch上搭建简单神经网络实现回归和分类的示例,分享给大家,具体如下:一、PyTorch入门1. 安装方法登录PyTorch
- 题主Vue小白,入门demo时想在其中使用jQuery(当然可能是不推荐的做法哈,毕竟俩儿的风格不一样,但万一你就需要呢 _^ ^_),结果
- import pandas as pdimport numpy as np一、时间类型及其在python中对应的类型时间戳–timestam
- 要使数据库具备更强的抵御侵犯的能力,你要采取几步措施。有些措施只是良好的服务器管理的一部分,如拥有SQL Server最新的补丁,其他则包括
- __init__()方法意义重大的原因有两个。第一个原因是在对象生命周期中初始化是最重要的一步;每个对象必须正确初始化后才能正常工作。第二个
- window对文件夹的操作主要包括移动/剪切/复制,本篇文章主要用jQuery来实现,下面一起来了解一下把。1.先看下效果吧!2.在添加一个
- 记录mysql5.7.14安装与配置过程,梳理成文,希望对大家有所帮助。1.配置文档: ####################配
- 一、在vs中新建一个工程,然后新建一个源文件二、右击上述图片中的mysql_test工程名,然后在最下方找到属性,并点击三、点击VC++目录
- 前言还记得这个九九乘法表吗,这次课后相信你可以用代码给你的小弟弟妹妹们变出这份“葵花宝典”。循环如果要把循环翻译成机器语言,那他对应的可以是
- 最初开发的 Matplotlib,仅支持绘制 2d 图形,后来随着版本的不断更新, Matplotlib 在二维绘图的基础上,构建了一部分较
- 如下所示:年月日时分秒>>> print datetime.datetime.now().strftime("%
- HP注释规范注释在写代码的过程中非常重要,好的注释能让你的代码读起来更轻松,在写代码的时候一定要注意注释的规范。“php是一门及其容易入门的
- 之前总结过flask里的基础知识,现在来总结下flask里的前后端数据交互的知识,这里用的是Ajax一、 post方法1、post方法的位置
- 首先了解下session的机制客户端(浏览器中) cookie 作为键值,匹配服务器端的一个数据。然后客户端每次在 HTTP 请求里面带着那
- import timefrom selenium import webdriverfrom selenium.webdriver.commo