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

目录

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 向量叉乘的几何意义

8 unity里的 多种向量 vector

8.0 unity里的C#脚本新建以后,必须挂到bierarcry下才会生效

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

8.2 vector3 在unity里,可以是向量,坐标,旋转方向,缩放比例等

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

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

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

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

8.5 unity里单个向量的一些计算

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

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

8.6 unity里2个向量的一些计算(Vector3.方法,大写首字母)


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 相乘的结果 , 计算结果是一个新向量

8 unity里的 多种向量 vector

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]]

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;

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

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 update
    void 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 frame
    void Update()
    {
        
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

算法3(力扣83)-删除链表中的重复元素

1、题目:给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 2、实现( 因为已排序,所以元素若重复,必然在其下一位)(这里为在vscod…

深度学习基础知识

深度学习是人工智能(AI)和机器学习(ML)领域的一个重要分支,以下是对深度学习基础知识的归纳: 一、定义与原理 定义:深度学习是一种使计算机能够从经验中学习并以概念层次结构的方式理解世界的机…

基于mediapipe的手势游戏控制

基于mediapipe的手势游戏控制 ​ 玩游戏,那不是有手就行!!! mediapipe介绍 ​ Mediapipe是Google在2019年开发并提出的一款开源的跨平台多媒体处理框架,用于构建基于机器学习的应用程序,特别是涉及到计算机视觉、音频处理、姿势估计等领域。…

015: 深度学习之正向传播和反向传播

本文为合集收录,欢迎查看合集/专栏链接进行全部合集的系统学习。 合集完整版请参考这里。 上一节介绍了训练和推理的概念,这一节接着训练和推理的概念讲一下,神经网络的正向传播和反向传播。 正反向传播 其实单看正向传播和反向传播这两个…

2025.1.15——二、字符型注入

一、基本操作:整理已知信息,本题为字符型注入 二、解题步骤 step 1:确认为字符型注入 键入: 1 键入:1 and 12 # 发现报错 键入:1 and 11 # 未发现报错 所以确认为字符型注入 step 2:查询…

UML系列之Rational Rose笔记四:时序图(顺序图_序列图)

时序图有很多画法,这基本上能算rose里面要求最乱的一种图了;有些人的需求是BCE模式,这是正常规范点的,有些人就不需要,有些需要用数据库交互,有些不需要;没有一个较为统一的需求;在此…

LabVIEW水位监控系统

LabVIEW开发智能水位监控系统通过集成先进的传感技术与控制算法,为工业液体存储提供精确的水位调控,保证了生产过程的连续性与安全性。 项目背景 在化工和饮料生产等行业中,水位控制的准确性对保证生产安全和提高产品质量至关重要。传统的水…

STC的51单片机LED点灯基于KEIL

前言: 该文源于回答一个朋友的问题,代码为该朋友上传,略作修改,在此说明问题以及解决问题的思路,以减少新手错误。 电路图: 该位朋友未上传电路图,说明如下: stc8g1k08a-sop8控制…

基于YOLOv8的卫星图像中船只检测系统

基于YOLOv8的卫星图像中船只检测系统 (价格90) 使用的是 MASATI-V2 数据集 训练集 3617张 验证集 452张 测试集 453张 包含 [boat] [船只] 1个类 通过PYQT构建UI界面,包含图片检测,视频检测,摄像头实时检测。 (该系…

用 Python 自动化处理日常任务

💖 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长…

mac intel芯片下载安卓模拟器

一、调研 目前主流两个模拟器: 雷神模拟器 不支持macosmumu模拟器pro版 不支持macos intel芯片 搜索到mumu的Q&A中有 “Intel芯片Mac如何安装MuMu?” q&a🔗:https://mumu.163.com/mac/faq/install-on-intel-mac.html 提…

python中的RPA->playwright自动化录制脚本实战案例笔记

playwright录制功能使用绕过登录操作 1、首先安装playwright pip install playwright2、 安装支持的浏览器 playwright install # 安装支持的浏览器:cr, chromium, ff, firefox, wk 和 webkit3、接着在自己的项目下运行录制命令: playwright codegen…

【原创】大数据治理入门(2)《提升数据质量:质量评估与改进策略》入门必看 高赞实用

提升数据质量:质量评估与改进策略 引言:数据质量的概念 在大数据时代,数据的质量直接影响到数据分析的准确性和可靠性。数据质量是指数据在多大程度上能够满足其预定用途,确保数据的准确性、完整性、一致性和及时性是数据质量的…

数据结构(Java版)第八期:LinkedList与链表(三)

专栏:数据结构(Java版) 个人主页:手握风云 目录 一、链表中的经典面试题 1.1. 链表分割 1.2. 链表的回文结构 1.3. 相交链表 1.4. 环形链表 一、链表中的经典面试题 1.1. 链表分割 题目中要求不能改变原来的数据顺序,也就是如上图所示。…

ASP.NET Core - 配置系统之自定义配置提供程序

ASP.NET Core - 配置系统之自定义配置提供程序 4. 自定义配置提供程序IConfigurationSourceIConfigurationProvider 4. 自定义配置提供程序 在 .NET Core 配置系统中封装一个配置提供程序关键在于提供相应的 IconfigurationSource 实现和 IConfigurationProvider 接口实现&…

MPLS原理及配置

赶时间可以只看实验部分 由来:90年代中期,互联网流量的快速增长。传统IP报文依赖路由器查询路由表转发,但由于硬件技术存在限制导致转发性能低,查表转发成为了网络数据转发的瓶颈。 因此,旨在提高路由器转发速度的MPL…

【韩顺平Java笔记】第8章:面向对象编程(中级部分)【327-337】

327. 断点调试(Debug) 一个实际需求 在开发中,程序员在查找错误时,可用断点模式在断点调试过程中,是运行状态,是以对象的运行类型来执行的。 A extends B; B b new A(); b.xx();//按照运行类型来执行的 …

Qt 各版本选择

嵌入式推荐用 Qt4.8,打包的程序小:Qt4.8.7是Qt4的终结版本,是Qt4系列版本中最稳定最经典的 最后支持xp系统的长期支持版本:Qt5.6.3;Qt5.7.0是最后支持xp系统的非长期支持版本。 最后提供mysql数据库插件的版本&#xf…

常见好用的PHP CMS开源系统有哪些?

开源的系统,网站大家估计也见过很多,尤其是用PHP写的开源系统也很受用户们欢迎,这类系统通常以简单、使用、开源为优势,为用户提供更好的服务。以下就为大家介绍几个常见且好用的PHP CMS开源系统。欢迎补充! 1、WordP…

DuckDB:精通Insert语句处理数据冲突

本文介绍DuckDB insert语句用法,包括常规的批量插入,尤其是插入数据冲突的处理,最后还提及returning子句的用法,每个用法提供示例说明。 insert插入数据 INSERT INTO向表中插入新行。可以插入由值表达式指定的一行或多行&#xf…