当前位置: 首页 > news >正文

Unity--向量点乘叉乘在Unity中的使用

记录一下。

向量的点乘在Unity中使用Vector.Dot(v1,v2)方法进行运算,运算的过程其实是v1在v2的投影长度乘v2的长度(反之亦然)。得到一个标量结果,如果Vector.Dot(v1,v2)中的v1和v2均为单位向量,得到的则是v1和v2夹角的余弦值,用下面的代码来解释:

        Vector2 V1 = new Vector2(0, 2);Vector2 V2 = new Vector2(2,2);float result1 = Vector3.Dot(V1, V2);//直接计算得到的点乘值float result2 = Vector3.Project(V1, V2).magnitude * V2.magnitude;//通过原理运算得到的值,只有正值,只做原理解释,不做使用float result3 = Vector3.Dot(V1.normalized, V2.normalized);//参数单位向量化得到的值Debug.Log(string.Format("result1:{0}", result1));Debug.Log(string.Format("result2:{0}", result2));Debug.Log(string.Format("result3:{0}", result3));float angel = Mathf.Acos(result3) * Mathf.Rad2Deg;//使用反余弦获取角度的弧度,在转化成角度Debug.Log(string.Format("Angle:{0}",angel));

 

运行看看结果:

当然我们获取角度可以直接使用Vector.Angle(v1,v2),这里只做原理解释。还需要注意的是:通过Vector.Dot()运算的结果是有正负的,可以通过正负判断两个向量的方向关系,在项目中可以判断是在视野前方还是在视野后方。比如V1表示我们视野的正前方,此时V2在我们视野前方,把V2值换成(-2,-2)看结果:

结果显而易见。

----------------------------------------------------------------------------------------------------------------------------------------------------

下面看看叉乘:

在Unity里面叉乘使用Vector.Cross(V1,V2)表示,满足Unity的左手坐标系。得到的结果是一个垂直于V1,V2组成的平面的向量,那么这个向量肯定是垂直于V1和V2的。同时Vector.Cross(V1,V2)结果不同于Vector(V2,V1),Vector(V2,V1)相当于Vector(-V1,V2),结果相反

通过下面的代码和结果可以清楚看到:

 private void Start(){Vector3 right = Vector3.right.normalized;Vector3 left = Vector3.left.normalized;Vector3 up = Vector3.up.normalized;Vector3 down = Vector3.down.normalized;Vector3 result = Vector3.Cross(right, up);Vector3 result2 = Vector3.Cross(right, down);Vector3 result3 = Vector3.Cross(left, up);Vector3 result4 = Vector3.Cross(left, down);Debug.Log(string.Format("Vector3.Cross(right, up):{0}", result));Debug.Log(string.Format("Vector3.Cross(right, down):{0}", result2));Debug.Log(string.Format("Vector3.Cross(left, up):{0}", result3));Debug.Log(string.Format("Vector3.Cross(left, down):{0}", result4));
}

结果:

上面是X轴和Y轴组成的一个平面。那么得到的向量就是Z轴,可以看到得到的结果有正负关系,那其实就是向量V2是处于向量V1的左边方向还是右边方向,左边得到正值,右边得到负值。 可以根据正负做判断。

欢迎加群:4364930讨论。

http://www.xdnf.cn/news/839143.html

相关文章:

  • 天玑1100和天玑920处理器哪个好
  • PostScript(PS 格式)讲解
  • 数电设计--交通灯控制系统
  • 网络监控软件PRTG的配置及使用
  • 文心一言:中国版“ChatGPT”测评
  • 极市平台|100+深度学习各方向数据集资源大盘点
  • 20+ 个免费和高级的 Web 视频播放器
  • 大数据---MySQL基础---day1
  • 十款开源数据集成工具
  • 50款七夕表白代码大合集(超全)
  • boot教程5,2.0-2.5新特性,自动配置双刃剑,spring帝国神兵出世,转投Gradle,拥抱云原生
  • 通过一个例子理解边缘计算
  • 基于Go的开源全栈测试工具RunnerGo使用详解
  • python人狗大战游戏_day22 01 初识面向对象----简单的人狗大战小游戏
  • FineVis助力智慧水务:水务可视化智能决策与管理
  • 趣味问题——分酒问题
  • 一些好玩的网站!
  • 一起学测试|性能测试工具K6:什么是K6?如何安装配置?
  • Extjs控件属性
  • python基本使用
  • mysql 用户及权限
  • 录播系统的服务器有哪些,录播系统
  • [美国]《暮光之城4:破晓(下)》[BD-RMVB.720p.中英双字][2012年冒险幻想]
  • Head First Servlets JSP 学习笔记 第一章 —— 前言和体系结构
  • 小米低调上线的良心APP,永久免费真心好用!
  • 一个简单的HTML网页 个人网站设计与实现 HTML+CSS+JavaScript自适应个人相册展示留言博客模板
  • HTML跳动爱心代码|最近很火的爱心代码你还没收到吗
  • 网站重构经验之谈:解读Div+CSS网页制作误区
  • 带来电脑常见的电源故障原因和修理方案,值得收藏!
  • innovus中path group 的策略和应用(下)