求两个向量之间的夹角

求两个向量之间的夹角

  • 介绍
  • Unity的API求向量夹角
    • Vector3.Angle
    • Vector3.SignedAngle
  • 自定义获取方法
    • 0-360度的夹角
  • 总结

介绍

求两个向量之间的夹角方法有很多,比如说Unity中的Vector3.Angle,Vector3.SignedAngle等方法,具体在什么情况下使用这个还是得看这几个函数的结果是什么。

Unity的API求向量夹角

通过蓝线和红线来做对比有如下的例子,以及打印如下
在这里插入图片描述

Vector3.Angle

这个API
这个API会计算出来这两个向量的夹角,不带正负号且通过测试发现这个角度只是小于180度的夹角,也就是说只是计算正向最小夹角使用

Vector3.SignedAngle

在这里插入图片描述
这个API计算的是从from向量到to向量的夹角,并且需要一个轴向(比如我需要计算的是XZ轴的夹角,则我axis轴向我写Vector3.Up即可)。
通过检测发现这个方法是有正负号的,区间为[-180,180]之间。
也就是说想要计算有符号的夹角则可以使用这个方法。

自定义获取方法

    /// <summary>/// 计算夹角带有正负号/// </summary>/// <param name="from"></param>/// <param name="to"></param>/// <param name="n"></param>/// <returns></returns>public float AngleSigned(Vector3 from, Vector3 to, Vector3 n){return Mathf.Atan2(Vector3.Dot(n, Vector3.Cross(from, to)),Vector3.Dot(from, to)) * Mathf.Rad2Deg;}
    /// <summary>/// 计算夹角带有正负号/// </summary>/// <param name="a"></param>/// <param name="b"></param>/// <param name="dir"></param>/// <returns></returns>private float GetAngle(Vector3 a, Vector3 b, Vector3 dir){float angle1 = Vector3.Angle(a, b); //求出两向量之间的夹角  Vector3 normal = Vector3.Cross(a, b);//叉乘求出法线向量  angle1 *= Mathf.Sign(Vector3.Dot(normal, dir));  //求法线向量与物体上方向向量点乘,结果为1或-1,修正旋转方向return angle1;}

上述我提供得这两个方法经过测试也是可行的。
第一种AngleSigned方法类似于Unity的原生API Vector3.SignedAngle
第二种GetAngle方法其实就是先计算出来正常的不带符号的角度,在去用叉乘计算一下是左侧还是右侧最终给计算出的角度加上了正负号。

0-360度的夹角

如果要计算0-360度的夹角,则完全可以将上面得到的[-180,180]的夹角判定为附属时+360,判定为正时则不处理,这样就得到了区间[0,360]的夹角

总结

以上是对计算角度的一些相关计算,如果有写的不对或者有更好的想法可以评论说下,感谢大家的支持和关注!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/496030.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Swagger3 使用详解

Swagger3 使用详解 一、简介1 引入依赖2 开启注解3 增加一个测试接口4 启动服务报错1.5 重新启动6 打开地址&#xff1a;http://localhost:8093/swagger-ui/index.html 二、Swagger的注解1.注解Api和ApiOperation2.注解ApiModel和ApiModelProperty3.注解ApiImplicitParams和Api…

数据库管理-第156期 Oracle Vector DB AI-07(20240227)

数据库管理156期 2024-02-27 数据库管理-第156期 Oracle Vector DB & AI-07&#xff08;20240227&#xff09;1 Vector相关DDL操作可以在现有的表上新增vector数据类型的字段&#xff1a;可以删除包含vector数据类型的列&#xff1a;可以使用CTAS的方式&#xff0c;从其他有…

Mendix 10.7 发布- Go Mac It!

在我们上个月发布了硕果累累的 Mendix 10.6 MTS 之后&#xff0c;您是否还没有抚平激动的情绪&#xff1f;好吧&#xff0c;不管您是否已经准备好&#xff0c;本月将带来另一个您想知道的大亮点——Mac版Studio Pro&#xff01;但这还不是全部。本月&#xff0c;我们还将推出Re…

jenkins+kubernetes+git+dockerhub构建devops云平台

Devops简介 k8s助力Devops在企业落地实践 传统方式部署项目为什么发布慢&#xff0c;效率低&#xff1f; 上线一个功能&#xff0c;有多少时间被浪费了&#xff1f; 如何解决发布慢&#xff0c;效率低的问题呢&#xff1f; 什么是Devops&#xff1f; 敏捷开发 提高开发效率&…

【通讯录案例-tabbarController结构 Objective-C语言】

一、接下来,我们来说一下,tabbarController的View结构 1.实际上,这个tabbarController的结构呢,跟这个导航控制器的结构,差不多, 它里边儿呢,首先,有一个tabbarController的View, tabbarController,实际上,里边儿,有一个View,是专门儿来放子控制器View的, nav…

计算机网络——IPV4数字报

1. IPv4数据报的结构 本结构遵循的是RFC 791规范&#xff0c;介绍了一个IPv4数据包头部的不同字段。 1.1 IPv4头部 a. 版本&#xff08;Version&#xff09;&#xff1a;指明了IP协议的版本&#xff0c;IPv4表示为4。 b. 头部长度&#xff08;IHL, Internet Header Length&…

【六袆-Golang】Golang:安装与配置Delve进行Go语言Debug调试

安装与配置Delve进行Go语言Debug调试 一、Delve简介二、win-安装Delve三、使用Delve调试Go程序[命令行的方式]四、使用Golang调试程序 Golang开发工具系列&#xff1a;安装与配置Delve进行Go语言Debug调试 摘要&#xff1a; 开发环境中安装和配置Delve&#xff0c;一个强大的G…

算法打卡day5|哈希表篇01|Leetcode 242.有效的字母异位词 、19.删除链表的倒数第N个节点、202. 快乐数、1. 两数之和

哈希表基础知识 哈希表 哈希表关键码就是数组的索引下标&#xff0c;然后通过下标直接访问数组中的元素&#xff1b;数组就是哈希表的一种 一般哈希表都是用来快速判断一个元素是否出现集合里。例如要查询一个名字是否在班级里&#xff1a; 要枚举的话时间复杂度是O(n)&…

Leetcoder Day25| 回溯part05:子集+排列

491.递增子序列 给定一个整型数组, 你的任务是找到所有该数组的递增子序列&#xff0c;递增子序列的长度至少是2。 示例: 输入:[4, 7, 6, 7]输出: [[4, 6], [4, 7], [4, 6, 7], [6, 7], [7,7], [4,7,7]] 说明: 给定数组的长度不会超过15。数组中的整数范围是 [-100,100]。给定数…

【Python】Code2flow学习笔记

1 Code2flow介绍 Code2flow是一个代码可视化工具库&#xff0c;旨在帮助开发人员更好地理解和分析代码&#xff1a; 可以将Python代码转换为流程图&#xff0c;以直观的方式展示代码的执行流程和逻辑结构。具有简单易用、高度可定制化和美观的特点&#xff0c;适用于各种代码…

AI学习(5):PyTorch-核心模块(Autograd):自动求导

1.介绍 在深度学习中&#xff0c;自动求导是一项核心技术&#xff0c;它使得我们能够方便地计算梯度并优化模型参数。PyTorch 提供了一个强大的自动求导模块(Autograd)&#xff0c;它可以自动计算张量的导数得出梯度信息&#xff0c;同时也支持高阶导数计算。 1.1 概念词 在学…

Bicycles(变形dijkstra,动态规划思想)

Codeforces Round 918 (Div. 4) G. Bicycles G. Bicycles 题意&#xff1a; 斯拉夫的所有朋友都打算骑自行车从他们住的地方去参加一个聚会。除了斯拉维奇&#xff0c;他们都有一辆自行车。他们可以经过 n n n 个城市。他们都住在城市 1 1 1 &#xff0c;想去参加位于城市…