求两个向量之间的夹角

news2025/3/12 17:35:13

求两个向量之间的夹角

  • 介绍
  • 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.coloradmin.cn/o/1475655.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Groovy(第九节) Groovy 之单元测试

JUnit 利用 Java 对 Song 类进行单元测试 默认情况下 Groovy 编译的类属性是私有的,所以不能直接在 Java 中访问它们,必须像下面这样使用 setter: 编写这个测试用例余下的代码就是小菜一碟了。测试用例很好地演示了这样一点:用 Groovy 所做的一切都可以轻易地在 Java 程序…

使用 gregwar/captcha 生成固定字符的验证码

图片验证码生成失败 $captcha new CaptchaBuilder("58 ?"); $code $captcha->getPhrase();\Cache::put($key, [phone > $phone, code > $captcha->getPhrase()], $expiredAt);$captcha->build(); $result [captcha_key > $key,expired_at >…

Linux------进程地址空间

目录 一、进程地址空间 二、地址空间本质 三、什么是区域划分 四、为什么要有地址空间 1.让进程以统一的视角看到内存 2.进程访问内存的安全检查 3.将进程管理与内存管理进行解耦 一、进程地址空间 在我们学习C/C的时候&#xff0c;一定经常听到数据存放在堆区、栈区、…

雾锁王国服务器官方配置要求说明

雾锁王国/Enshrouded服务器CPU内存配置如何选择&#xff1f;阿里云服务器网aliyunfuwuqi.com建议选择8核32G配置&#xff0c;支持4人玩家畅玩&#xff0c;自带10M公网带宽&#xff0c;1个月90元&#xff0c;3个月271元&#xff0c;幻兽帕鲁服务器申请页面 https://t.aliyun.com…

TCP/IP-常用网络协议自定义结构体

1、TCP/IP模型&#xff1a; 2、TCP/IP- 各层级网络协议&#xff08;从下往上&#xff09;&#xff1a; 1&#xff09;数据链路层&#xff1a; ARP: 地址解析协议&#xff0c;用IP地址获取MAC地址的协议&#xff0c;通过ip的地址获取mac地 …

Vue项目 快速上手(如何新建Vue项目,启动Vue项目,Vue的生命周期,Vue的常用指令)

目录 一.什么Vue框架 二.如何新建一个Vue项目 1.使用命令行新建Vue项目 2.使用图形化界面新建Vue项目 三.Vue项目的启动 启动Vue项目 1.通过VScode提供的图形化界面启动Vue项目 2.通过命令行的方式启动Vue项目 四.Vue项目的基础使用 常用指令 v-bind 和 v-model v…

学生党福音!趁着拍拍开学季活动买平板啦!

谁还在买5年前的平板啊&#xff1f; 当然是我&#xff01; 虽然手里有台ipad&#xff0c;但ios系统限制多&#xff0c;不方便&#xff0c;一直想再要一台安卓平板。 去年观望了好久小米平板5pro&#xff0c;想着如果8256G配置价格在1500以下就入手&#xff0c;结果一直不掉价…

4_怎么看原理图之协议类接口之SPI笔记

SPI&#xff08;Serial Peripheral Interface&#xff09;是一种同步串行通信协议&#xff0c;通常用于在芯片之间传输数据。SPI协议使用四根线进行通信&#xff1a;主设备发送数据&#xff08;MOSI&#xff09;&#xff0c;从设备发送数据&#xff08;MISO&#xff09;&#x…

苹果ios群控软件开发常用源代码分享!

在移动软件开发领域&#xff0c;苹果设备由于其封闭性和安全性受到了广大开发者的青睐&#xff0c;然而&#xff0c;这也为开发者带来了一些挑战&#xff0c;特别是在进行群控软件开发时。 群控软件是指可以同时控制多台设备的软件&#xff0c;这在自动化测试、批量操作等场景…

01 MySQL之连接

1. 连接 1.0 基础认知 多表(主表)和一表(从表的区别): 多表一般是主表&#xff0c;一般存储主要数据&#xff0c;每个字段都可能存在重复值&#xff0c;没有主键&#xff0c;无法根据某个字段定位到准确的记录&#xff1b; 一表一般是从表&#xff0c;一般存储辅助数据&…

『Java安全』编译jdk

文章目录 一、源码下载二、环境依赖配置[^1]三、依赖检查及构建编译配置四、编译jdk五、编译完成完 一、源码下载 以OpenJDK为例&#xff1a; jdk&#xff1c;10访问OpenJDK Mercurial Repositories jdk≥10访问子目录jdk/jdk12: log (openjdk.org) 二、环境依赖配置1 i7-…

神经网络结构搜索(NAS)

华为诺亚AI系统工程实验室主任刘文志解读如何使用AutoML预测基站流量 - 知乎讲师介绍&#xff1a;刘文志&#xff08;花名风辰&#xff09;&#xff0c;华为诺亚AI系统工程实验室主任&#xff0c;异构并行计算专家&#xff0c;毕业于中国科学院研究生院&#xff0c;闻名于并行计…

鸿蒙应用程序包安装和卸载流程

开发者 开发者可以通过调试命令进行应用的安装和卸载&#xff0c;可参考多HAP的调试流程。 图1 应用程序包安装和卸载流程&#xff08;开发者&#xff09; 多HAP的开发调试与发布部署流程 多HAP的开发调试与发布部署流程如下图所示。 图1 多HAP的开发调试与发布部署流程 …

全网最详细的接口自动化测试框架实战(Pytest+Allure+Excel)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1. Allure 简介 Allure 框架是一个灵活的、轻量级的、支持多语…

Flink动态分区裁剪

1 原理 1.1 静态分区裁剪与动态分区裁剪 静态分区裁剪的原理跟谓词下推是一致的&#xff0c;只是适用的是分区表&#xff0c;通过将where条件中的分区条件下推到数据源达到减少分区扫描的目的   动态分区裁剪应用于Join场景&#xff0c;这种场景下&#xff0c;分区条件在joi…

【服务发现--ingress】

1、ingress介绍 Ingress 提供从集群外部到集群内服务的 HTTP 和 HTTPS 路由。 流量路由由 Ingress 资源所定义的规则来控制。 Ingress 是对集群中服务的外部访问进行管理的 API 对象&#xff0c;典型的访问方式是 HTTP。 Ingress 可以提供负载均衡、SSL 终结和基于名称的虚拟…

Nginx网络服务六-----IP透传、调度算法和负载均衡

1.实现反向代理客户端 IP 透传 就是在日志里面加上一个变量 Module ngx_http_proxy_module [rootcentos8 ~]# cat /apps/nginx/conf/conf.d/pc.conf server { listen 80; server_name www.kgc.org; location / { index index.html index.php; root /data/nginx/html/p…

德人合科技 | 天锐绿盾终端安全管理系统

德人合科技提到的“天锐绿盾终端安全管理系统”是一款专业的信息安全防泄密软件。这款软件基于核心驱动层&#xff0c;为企业提供信息化防泄密一体化方案。 www.drhchina.com 其主要特点包括&#xff1a; 数据防泄密管理&#xff1a;天锐绿盾终端安全管理系统能够确保数据在创…

element el-date-picker 日期组件置灰指定日期范围、禁止日期范围日期选择

JS如何将当前日期或指定日期转时间戳_javascript技巧_脚本之家 小于指定日期前的日期置灰 比如这里 指定日期是 2024-02-20 10:48:15 disabledDate(time) time是一个函数提供的时间用于比较 他是一个时间戳↓ 理解为我们想要置灰的时间 time.getTime() < timeStamps- 1 *…

通过一个栗子来看看创建和运行servlet

通过前面一篇文章的介绍&#xff08;搞着搞着对web project是不是有点迷糊&#xff1f;先关注几个问题-CSDN博客&#xff09;大家对于servlet作为中间层接收请求和反馈响应有了概念上的认知&#xff0c;接下来通过一个栗子来加深一下理解&#xff0c;还是基于前面的jsp项目&…