Python 计算任意两向量之间的夹角方法

如图所示,我们要计算任意两个向量之间的夹角。

(图中的坐标数字是估计值,随手给定)

python代码如下

import math 

AB = [1,-3,5,-1]
CD = [4,1,4.5,4.5]
EF = [2,5,-2,6]
PQ = [-3,-4,1,-6]

def angle(v1, v2):
  dx1 = v1[2] - v1[0]
  dy1 = v1[3] - v1[1]
  dx2 = v2[2] - v2[0]
  dy2 = v2[3] - v2[1]
  angle1 = math.atan2(dy1, dx1)
  angle1 = int(angle1 * 180/math.pi)
  # print(angle1)
  angle2 = math.atan2(dy2, dx2)
  angle2 = int(angle2 * 180/math.pi)
  # print(angle2)
  if angle1*angle2 >= 0:
    included_angle = abs(angle1-angle2)
  else:
    included_angle = abs(angle1) + abs(angle2)
    if included_angle > 180:
      included_angle = 360 - included_angle
  return included_angle

ang1 = angle(AB, CD)
print("AB和CD的夹角")
print(ang1)
ang2 = angle(AB, EF)
print("AB和EF的夹角")
print(ang2)
ang3 = angle(AB, PQ)
print("AB和PQ的夹角")
print(ang3)
ang4 = angle(CD, EF)
print("CD和EF的夹角")
print(ang4)
ang5 = angle(CD, PQ)
print("CD和PQ的夹角")
print(ang5)
ang6 = angle(EF, PQ)
print("EF和PQ的夹角")
print(ang6)

结果为

AB和CD的夹角
55
AB和EF的夹角
139
AB和PQ的夹角
52
CD和EF的夹角
84
CD和PQ的夹角
107
EF和PQ的夹角
169

以上这篇Python 计算任意两向量之间的夹角方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Python:Numpy 求平均向量的实例

    如下所示: >>> import numpy as np >>> a = np.array([[1, 2, 3], [3, 1, 2]]) >>> b = np.array([[5, 2, 6], [5, 1, 2]]) >>> a array([[1, 2, 3], [3, 1, 2]]) >>> b array([[5, 2, 6], [5, 1, 2]]) >>> c = a + b >

  • 对numpy中数组转置的求解以及向量内积计算方法

    有点抱歉的是我的数学功底确实是不好,经过了高中的紧张到了大学之后松散了下来.原本高中就有点拖后腿的数学到了大学之后更是一落千丈.线性代数直接没有学明白,同样没有学明白的还有概率及统计以及复变函数.时至今日,我依然觉得这是人生中让人羞愧的一件事儿.不过,好在我还有机会,为了不敷衍而去学习一下. 矩阵的转置有什么作用,我真是不知道了,今天总结完矩阵转置的操作之后先去网络上补充一下相关的知识. 今天的代码操作如下: In [15]: arr1 = np.arange(20) In [16]: arr1

  • 对numpy中向量式三目运算符详解

    如果用到数据筛选功能,可以使用x if condition else y的逻辑实现.如果使用的是纯Python,可以使用不断迭代的方式对每一组元素组合进行相应的判断筛选.不过,如果使用numpy中的向量化计可以大大加速运算的过程. 在numpy中有一个这个三目运算的向量版本numpy.where.where方法可以接收三个参数,第一个参数为条件向量,而第二.第三个参数可以是矩阵也可以是标量.接下来做一下相应功能的纯Python功能实现以及向量方式实现. 记录如下: In [76]: xarr =

  • Python 计算任意两向量之间的夹角方法

    如图所示,我们要计算任意两个向量之间的夹角. (图中的坐标数字是估计值,随手给定) python代码如下 import math AB = [1,-3,5,-1] CD = [4,1,4.5,4.5] EF = [2,5,-2,6] PQ = [-3,-4,1,-6] def angle(v1, v2): dx1 = v1[2] - v1[0] dy1 = v1[3] - v1[1] dx2 = v2[2] - v2[0] dy2 = v2[3] - v2[1] angle1 = math.at

  • Python计算任意多边形间的重叠面积的示例代码

    目录 简介 1. shapely工具箱 2. 程序 简介 跟某人讨论一个排样问题. 他说,算法搜索速度很慢,每两个物体间的重叠面积计算时间若按1s来算,300个物体需要计算将近9万次. 我说,这用计算机视觉难道不是几句话解决的嘛! (小小的嘚瑟一把,虽然做了这么久的CV,一直觉得自己一无所成,但是没想到默默的就能解决别人的问题了哈哈哈~~) 本文档目的为: 给定的数据为多边形的各个顶点,为N*2的矩阵,N 为多边形的顶点个数,计算任意两个多边形重叠面积计算的工具介绍及程序. 注意,并不涉及IOU

  • 解决Python计算矩阵乘向量,矩阵乘实数的一些小错误

    计算:Ax-b A: 2*2 x: 2*1 b: 2*1 so, Ax-b: 2*1 if __name__ == "__main__": A = np.array([[4.0, 1.0], [1.0, 3.0]]) b = np.array([[1.0], [2.0]]) x_0 = np.array([[2.0], [1.0]]) r_k = A * x_0 - b print(r_k) 错误!!! 修改: if __name__ == "__main__":

  • Python中交换两个元素的实现方法

    Python既具有普通程序开发语言的特点,也具有Matlab语言用于数值计算的特点,,当然了数值计算是由其其强大的第三方库numpy实现的,矩阵在python中数据类型是ndarray,python中交换两个数值的代码和交换同一矩阵(ndarray)中不同向量的写法是不一样的. 以下是用Python原生的数据结构list实现的交换 >> a = [1,2,3] >> b = [4,5,6] >> a [1,2,3] >> b [4,5,6] >>

  • Python实现求两个数组交集的方法示例

    本文实例讲述了Python实现求两个数组交集的方法.分享给大家供大家参考,具体如下: 一.题目 给定两个数组,编写一个函数来计算它们的交集. 例1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 例2: 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出: [4,9] 说明: 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致 我们可以不考虑输出结果的顺序 二.解法 首先把两个数组都排序,然后两个数

  • python同时给两个收件人发送邮件的方法

    本文实例讲述了python同时给两个收件人发送邮件的方法.分享给大家供大家参考.具体分析如下: 该范例通过python内置的smtplib包发送邮件 import smtplib import string host = "localhost" fromclause = "a@b.com" toclause = "c@d.com, e@f.com" toclause = string.splitfields(toclause, ",&q

  • Python计算已经过去多少个周末的方法

    本文实例讲述了Python计算已经过去多少个周末的方法.分享给大家供大家参考.具体如下: def weekends_between(d1,d2): days_between = (d2-d1).days weekends, leftover = divmod(days_between,7) if leftover: start_day = (d2-timedelta(leftover)).isoweekday() end_day = start_day+leftover if start_day

  • php实现计算百度地图坐标之间距离的方法

    本文实例讲述了php实现计算百度地图坐标之间距离的方法.分享给大家供大家参考,具体如下: 下面是网上的代码,使用的时候需要进行些许修改 第一个函数是获得范围,参数为纬度经度半径 第二个函数是计算坐标距离 <?php define('PI',3.1415926535898); define('EARTH_RADIUS',6378.137); //计算范围,可以做搜索用户 function GetRange($lat,$lon,$raidus){ //计算纬度 $degree = (24901 *

  • Python实现合并两个有序链表的方法示例

    本文实例讲述了Python实现合并两个有序链表的方法.分享给大家供大家参考,具体如下: 思路:先选出第一个节点,然后遍历两个链表,把小的作为当前节点的下一个节点,一直到其中一个链表遍历完,这时候把另一个链表直接接上就好 # Definition for singly-linked list. # class ListNode(object): # def __init__(self, x): # self.val = x # self.next = None class Solution(obj

  • 对python实现合并两个排序链表的方法详解

    输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 1.迭代方法 def Merge(self, pHead1, pHead2): p1, p2 = pHead1, pHead2 if p1 and p2: if p1.val < p2.val: head = p1 p1 = p1.next else: head = p2 p2 = p2.next cur = head elif p1: return p1 else: return p2 while p

随机推荐