unity学习16:unity里向量的计算,一些方法等

server/2025/1/18 8:34:34/

目录

unity%E9%87%8C%E7%9A%84%E5%90%91%E9%87%8F%EF%BC%9A-toc" style="margin-left:0px;">1 unity里的向量:

2 向量加法

2.1 向量加法的几何意义

2.2向量加法的标量算法

3 向量减法

3.1 向量减法的几何意义

3.2 向量减法的标量算法

4 向量的标量乘法

5 向量之间的乘法要注意是左乘 还是右乘

5.1 注意区别

5.2 向量,矩阵,张量,还是要注意区分,不要随便混用

6  向量的点乘 / 点积

6.1  向量点乘公式1

6.2 向量点乘公式2

6.3 向量点乘公式3,如果都是单位向量,那么A·B = cos θ

6.4 向量点乘的几何意义

7  向量的叉乘

7.1 向量叉乘的几何意义

unity%E9%87%8C%E7%9A%84%20%E5%A4%9A%E7%A7%8D%E5%90%91%E9%87%8F%20vector-toc" style="margin-left:0px;">8 unity里的 多种向量 vector

unity%E9%87%8C%E7%9A%84C%23%E8%84%9A%E6%9C%AC%E6%96%B0%E5%BB%BA%E4%BB%A5%E5%90%8E%EF%BC%8C%E5%BF%85%E9%A1%BB%E6%8C%82%E5%88%B0bierarcry%E4%B8%8B%E6%89%8D%E4%BC%9A%E7%94%9F%E6%95%88-toc" style="margin-left:40px;">8.0 unity里的C#脚本新建以后,必须挂到bierarcry下才会生效

8.1 结构体vector 有几种, 虽然有多个数,但是还不是矩阵, 都还是向量vector

unity%E9%87%8C%EF%BC%8C%E5%8F%AF%E4%BB%A5%E6%98%AF%E5%90%91%E9%87%8F%EF%BC%8C%E5%9D%90%E6%A0%87%EF%BC%8C%E6%97%8B%E8%BD%AC%E6%96%B9%E5%90%91%EF%BC%8C%E7%BC%A9%E6%94%BE%E6%AF%94%E4%BE%8B%E7%AD%89-toc" style="margin-left:40px;">8.2 vector3 在unity里,可以是向量,坐标,旋转方向,缩放比例等

8.3 结构体的初始化方法有两种

8.3.1  用new,new一个新的实例除了

8.3.2 直接变量=特定的固定/内置属性

8.4  特殊的vector,系统封装好后可以直接用

unity%E9%87%8C%E5%90%91%E9%87%8F%E7%9A%84%E5%9F%BA%E6%9C%AC%E8%AE%A1%E7%AE%97-toc" style="margin-left:40px;">8.5 unity里单个向量的一些计算

8.5.1 可以显示 Vector3结构体变量的某个维度坐标

8.5.2 可以显示 Vector3结构体变量的其他属性(变量本身的方法属性一般不大写首字母)

unity%E9%87%8C2%E4%B8%AA%E5%90%91%E9%87%8F%E7%9A%84%E4%B8%80%E4%BA%9B%E8%AE%A1%E7%AE%97-toc" style="margin-left:40px;">8.6 unity里2个向量的一些计算(Vector3.方法,大写首字母)


unity%E9%87%8C%E7%9A%84%E5%90%91%E9%87%8F%EF%BC%9A">1 unity里的向量:

  • 一般坐标原点(0,0,0) 到某个点(x,y,z) 指向的一个有方向的线段
  • 起点:坐标原点的坐标:zero(0,0,0)
  • 终点:箭头的坐标

  • 一般的向量都是从原点出发的,也有其他不从原点出发的向量
  • 起点:起点的坐标
  • 终点:箭头的坐标

2 向量加法

2.1 向量加法的几何意义

  • 平行四边形法
  • 把一个向量接在另外一个向量的箭头(尾部)得到的点,(从原点出发)形成的新向量

2.2向量加法的标量算法

  • 向量的加法,可以转化为标量的计算
  • 因为向量,本身是以终点的坐标来表示的,加法也可以用这个坐标的3个维度的标量直接计算即可
  • A+B=(xa+xb), (ya+yb) ,(za+zb)

3 向量减法

3.1 向量减法的几何意义

  • 三角形法
  • 从被减的向量的尾部箭头,往减去它的向量的尾部箭头,连线+方向,(注意不是从原点生成的,而是直接生成了起点和终点,)形成的新向量即是减法的结果。

3.2 向量减法的标量算法

  • 向量的减法,可以转化为标量的计算
  • 因为向量,本身是以终点的坐标来表示的,减法也可以用这个坐标的3个维度的标量直接计算即可
  • A-B=(xa-xb), (ya-yb) ,(za-zb)

4 向量的标量乘法

  • a是标量
  • aA(x,y,z)= (ax,ay,az)

5 向量之间的乘法要注意是左乘 还是右乘

5.1 注意区别

  • A*B  != B*A

5.2 向量,矩阵,张量,还是要注意区分,不要随便混用

  • 向量相乘,矩阵相乘,其实是不一样的
  • 虽然向量可以看成是1维的矩阵,但一般还是把矩阵认为至少是二维的
  • 1维的:   vector 向量
  • 2维的:      matrix  矩阵
  • 3维+的: tensor 张量

6  向量的点乘 / 点积

  • A·B =x1*y1+x2*y2
  • 为什么呢
  • 因为这里是说的向量的点乘
  • 肯定需要两个向量可以进行乘法,所以肯定是一个横向量,1个总向量T
  • 因此所得结果才是一个标量
  • A*B = (x1,x2)*(y1,y2)T= (x1y1+x2*y2)

6.1  向量点乘公式1

  • A*B = (x1,x2)*(y1,y2)T= (x1y1+x2*y2)
  • 得到的结果是一个标量

6.2 向量点乘公式2

  • A·B =|A| · |B| · cos θ
  • 得到的结果是一个标量

6.3 向量点乘公式3,如果都是单位向量,那么A·B = cos θ

  • A·B =|A| · |B| · cos θ
  • 如果把AB,标准化为单位向量,那么|A|=1 · |B| =1
  • A·B = cos θ
  • 又因为 cos y = x  那么 y=arccos x
  • 这样可以直接求出 θ

  • 为什么可以标准化为单位向量后,来计算 夹角 θ
  • 因为本身2个向量之间的夹角θ 也和两个向量本身的长度无关
  • 所以直接拿到A,B对应的 单位向量即可

6.4 向量点乘的几何意义

  • A·B =|A| · |B| · cos θ
  • 其实就是一个向量A,往另外一个向量B的方向上进行投影,形成的新A*cos θ ,与B 相乘的结果。 结果是1个标量,没有方向

7  向量的叉乘

向量的叉乘结果还是1个向量

7.1 向量叉乘的几何意义

  • AxB 就是他们法线方向投影形成的一个新向量
  • AxB ,其实就是一个向量A,往另外一个向量B的法线(正交)方向上进行投影,形成的新A*sin θ ,与B 相乘的结果 , 计算结果是一个新向量

unity%E9%87%8C%E7%9A%84%20%E5%A4%9A%E7%A7%8D%E5%90%91%E9%87%8F%20vector">8 unity里的 多种向量 vector

unity%E9%87%8C%E7%9A%84C%23%E8%84%9A%E6%9C%AC%E6%96%B0%E5%BB%BA%E4%BB%A5%E5%90%8E%EF%BC%8C%E5%BF%85%E9%A1%BB%E6%8C%82%E5%88%B0bierarcry%E4%B8%8B%E6%89%8D%E4%BC%9A%E7%94%9F%E6%95%88">8.0 unity里的C#脚本新建以后,必须挂到bierarcry下才会生效

8.1 结构体vector 有几种, 虽然有多个数,但是还不是矩阵, 都还是向量vector

  • vector2  2维的, (x,y)        描述3维的向量
  • vector3  3维的, (x,y,z)     描述3维的向量
  • vector4  四元数,  (x,y,z,w)  描述4维的向量
  • 注意:矩阵是这样的,matrix = [[1,2],[1,2]]

unity%E9%87%8C%EF%BC%8C%E5%8F%AF%E4%BB%A5%E6%98%AF%E5%90%91%E9%87%8F%EF%BC%8C%E5%9D%90%E6%A0%87%EF%BC%8C%E6%97%8B%E8%BD%AC%E6%96%B9%E5%90%91%EF%BC%8C%E7%BC%A9%E6%94%BE%E6%AF%94%E4%BE%8B%E7%AD%89">8.2 vector3 在unity里,可以是向量,坐标,旋转方向,缩放比例等

  • 向量:  Vector3 v=new Vector3(1,1,0.5f);
  • 坐标:  Vector3 v=new Vector3(1,1,0.5f);
  • 旋转:  Vector3 v=new Vector3(1,1,0.5f);
  • 缩放:  Vector3 v=new Vector3(1,1,0.5f);

8.3 结构体的初始化方法有两种

  • new
  • v=Vector3.zero;

8.3.1  用new,new一个新的实例除了

  • Vector3 v=new Vector3(1,1,0.5f);
  • 类型   变量名  = new  类名(参数)

8.3.2 直接变量=特定的固定/内置属性

  • v=Vector3.zero;
  • 变量= Vector3.zero
  • 变量= Quaternion.identity

8.4  特殊的vector,系统封装好后可以直接用

  • v=Vector3.zero;
  • v=Vector3.one;
  • v=Vector3.forward;   //同坐标轴的3个方向的单位向量, z方向,(0,0,1)
  • v=Vector3.right;        //同坐标轴的3个方向的单位向量, x方向,(1,0,0)
  • v=Vector3.up;           //同坐标轴的3个方向的单位向量,x方向,(0,1,0)

可以直接改变V的各个坐标值

  • v.x=0;
  • v.y=0;
  • v.z=0;

unity%E9%87%8C%E5%90%91%E9%87%8F%E7%9A%84%E5%9F%BA%E6%9C%AC%E8%AE%A1%E7%AE%97">8.5 unity里单个向量的一些计算

8.5.1 可以显示 Vector3结构体变量的某个维度坐标

  • Debug.Log(v1.x+v1.y+v1.z);
  • Debug.Log() 同时只能显示1个

8.5.2 可以显示 Vector3结构体变量的其他属性(变量本身的方法属性一般不大写首字母)

  • 显示其长度:模,v1.magnitude
  • 讲其标准化,       v1.normalized

unity%E9%87%8C2%E4%B8%AA%E5%90%91%E9%87%8F%E7%9A%84%E4%B8%80%E4%BA%9B%E8%AE%A1%E7%AE%97">8.6 unity里2个向量的一些计算(Vector3.方法,大写首字母)

  • 计算2个向量之间的夹角
  • 包装的方法内部就是用点乘算出来的
  • Vector3.Angle(v1,v2)

  • 计算2个向量之间的距离
  • Vector3.Distance(v1,v2)

  • 计算2个向量之间的lerp插值
  • Vector3.Lerp(v1,v2,0.6f)

  • 计算2个向量之间的点乘
  • Vector3.Dot(v1,v2)

  • 计算2个向量之间的叉乘
  • Vector3.Cross(v1,v2)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class vectorTest1 : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){Vector3 v1=Vector3.right;Debug.Log(v1.x+v1.y+v1.z);Vector3 v2=Vector3.forward;Debug.Log(v2.x+v2.y+v2.z);Vector3 v3=Vector3.up;Debug.Log(v3.x+v3.y+v3.z);//计算1个向量之间的属性Debug.Log(v1.x+v1.y+v1.z);Debug.Log(v1.magnitude);Debug.Log(v1.normalized);//计算2个向量之间的夹角Debug.Log(Vector3.Angle(v1,v2));//计算2个向量之间的距离Debug.Log(Vector3.Distance(v1,v2));//计算2个向量之间的lerp插值Debug.Log(Vector3.Lerp(v1,v2,0.6f));//计算2个向量之间的点乘Debug.Log(Vector3.Dot(v1,v2));//计算2个向量之间的叉乘Debug.Log(Vector3.Cross(v1,v2));}// Update is called once per framevoid Update(){}
}


http://www.ppmy.cn/server/159308.html

相关文章

Unity3D BEPUphysicsint定点数3D物理引擎使用详解

前言 Unity3D作为一款强大的游戏开发引擎,提供了丰富的功能和工具,助力开发者轻松创建多样化的游戏。而在游戏开发中,物理引擎的作用不可忽视。BEPUphysicsint是一个基于Unity3D的开源3D物理引擎项目,它通过采用定点数计算来实现…

Oracle报错ORA-01078、LRM-00109

虚拟机异常关机后,rac数据库备机无法启动数据库,报错如下 解决方法: 找到如下路径文件 执行: cp init.ora.016202516818 /u01/app/oracle/product/19.3.0/db/dbs/ mv init.ora.016202516818 initplm2.ora 再次进入命令行sqlpl…

【深度学习】用RML2018训练好模型去识别RML2016的数据会遇到输入维度不匹配的问题,如何解决?

文章目录 问题解决办法1. 调整输入数据长度2. 修改模型结构(我个人比较推崇的方法)3. 迁移学习4. 重新训练模型5. 数据增强6. 其他差异问题 经常会有人问的一个问题: 我用RML2018跑的调制识别模型,用RML2016数据集能直接识别吗?(2018数据集信号样本的长度是1024,2016数据集…

常用的UI自动化测试框架是哪些?有什么优缺点?如何选择?

以下是对几种常用UI自动化测试框架(Selenium、Appium、Cypress)的优缺点分析及选择建议: 测试框架优点缺点示例语言Selenium跨浏览器兼容,多语言支持,社区资源丰富,成熟度高速度慢,需外部驱动&…

HarmonyOS Next 实现登录注册页面(ARKTS) 并使用Springboot作为后端提供接口

1. HarmonyOS next ArkTS ArkTS围绕应用开发在 TypeScript (简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集 ArkTS在TS的基础上扩展了struct和很多的装饰器以达到描述UI和状态管理的目的 以下代码是一个基于…

Windows 下 Postgres 安装与卸载 TimescaleDB 插件

Windows 下 Postgres 安装与卸载 TimescaleDB 插件 一、准备工作 安装 PostgreSQL:首先确保你已经在 Windows 系统中成功安装了 PostgreSQL 数据库。可以从 PostgreSQL 官方网站下载适合你系统的安装包,并按照安装向导进行安装。安装过程中&#xff0c…

phpstudy靶场搭建问题

前言: 靶场搭建遇到的问题,记录一下,可能是基础不牢吧,老是遇到奇奇怪怪的问题 思路: 跟着网上的搭建走一遍 内容: 目录 搭建pikachu遇到的问题 搭建pikachu遇到的问题 其实并不是第一次搭建&#x…

【GPT进化之路】从 GPT-1 的初试锋芒到 GPT-4 的跨模态智能时代

网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…