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 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.mzph.cn/news/892850.shtml

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

相关文章

卷积神经05-GAN对抗神经网络

卷积神经05-GAN对抗神经网络 使用Python3.9CUDA11.8Pytorch实现一个CNN优化版的对抗神经网络 简单的GAN图片生成 CNN优化后的图片生成 优化模型代码对比 0-核心逻辑脉络 1)Anacanda使用CUDAPytorch2)使用本地MNIST进行手写图片训练3)…

堆的实现【C++】

堆的实现 概念实现完整代码 概念 介绍堆之前得说一下二叉树,因为堆的逻辑结构是二叉树,二叉树的树的子集,树只有一个根节点,向下衍生出了很多节点,并且这个节点之间相互没有连接,除非是父子节点&#xff0…

UI自动化测试:异常截图和page_source

自动化测试过程中,是否遇到过脚本执行中途出错却不知道原因的情况?测试人员面临的不仅是问题的复现,还有对错误的快速定位和分析。而异常截图与页面源码(Page Source)的结合,正是解决这一难题的利器。 在实…

ASP.NET Core - 依赖注入(三)

ASP.NET Core - 依赖注入(三) 4. 容器中的服务创建与释放 4. 容器中的服务创建与释放 我们使用了 IoC 容器之后,服务实例的创建和销毁的工作就交给了容器去处理,前面也讲到了服务的生命周期,那三种生命周期中对象的创…

gitlab runner正常连接 提示 作业挂起中,等待进入队列 解决办法

方案1 作业挂起中,等待进入队列 重启gitlab-runner gitlab-runner stop gitlab-runner start gitlab-runner run方案2 启动 gitlab-runner 服务 gitlab-runner start成功启动如下 [rootdocserver home]# gitlab-runner start Runtime platform …

麦田物语学习笔记:构建游戏的时间系统

基本流程 1.代码思路 (1)新建一个TimeManager.cs (2)创建枚举变量来表示四季,在TimeManager里需要的变量有: 游戏内的秒,分钟,小时,天,月,年;游戏内的季节;控制一个季节有多少个月;控制时间的暂停;计时器tikTime (3)在Settings里添加计时器的阈值,以及各个时间的进位 (4)初始化…

Spring Boot教程之五十七:在 Apache Kafka 上发布 JSON 消息

Spring Boot | 如何在 Apache Kafka 上发布 JSON 消息 Apache Kafka是一个发布-订阅消息系统。消息队列允许您在进程、应用程序和服务器之间发送消息。在本文中,我们将了解如何在 Spring Boot 应用程序中向 Apache Kafka 发送 JSON 消息。 为了了解如何创建 Spring…

计算机网络 (44)电子邮件

一、概述 电子邮件(Electronic Mail,简称E-mail)是因特网上最早流行的应用之一,并且至今仍然是因特网上最重要、最实用的应用之一。它利用计算机技术和互联网,实现了信息的快速、便捷传递。与传统的邮政系统相比&#…

代码随想录算法训练营day02| 977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II

977. 有序数组的平方 双指针&#xff0c;新数组用k&#xff1b; 由于已经排序&#xff0c;所以比较两侧数据即可&#xff1b; class Solution { public:vector<int> sortedSquares(vector<int>& nums) {vector<int> ans(nums.size());int k nums.siz…

Unity 语音转文字 Vosk 离线库

市场有很多语音库&#xff0c;这里介绍Vosk SDK 除了支持untiy外还有原生开发服务器等 目录 安装unity示例demo下载语音训练文件运行demo结尾一键三联 注意事项 有可能debug出来的文本是空的&#xff0c;&#xff08;确保麦克风正常&#xff0c;且索引正确&#xff09;分大…

网络网络层ICMP协议

网络网络层ICMP协议 1. ICMP 协议介绍 ICMP&#xff08;Internet Control Message Protocol&#xff09;是 TCP/IP 协议簇中的网络层控制报文协议。用于在 IP 主机、路由器之间传递控制消息&#xff0c;提供可能有关通信问题的反馈信息。 以及用于网络诊断或调试&#xff08;…

Lianwei 安全周报|2025.1.13

新的一周又开始了&#xff0c;以下是本周「Lianwei周报」&#xff0c;我们总结推荐了本周的政策/标准/指南最新动态、热点资讯和安全事件&#xff0c;保证大家不错过本周的每一个重点&#xff01; 政策/标准/指南最新动态 01 美国国土安全部发布《公共部门生成式人工智能部署手…

计算机网络(五)运输层

5.1、运输层概述 概念 进程之间的通信 从通信和信息处理的角度看&#xff0c;运输层向它上面的应用层提供通信服务&#xff0c;它属于面向通信部分的最高层&#xff0c;同时也是用户功能中的最低层。 当网络的边缘部分中的两个主机使用网络的核心部分的功能进行端到端的通信时…

卷积神经02-CUDA+Pytorch环境安装

卷积神经02-CUDAPytorch环境安装 在使用Python进行pytorch的使用过程中遇到各种各样的版本冲突问题&#xff0c;在此进行记录 0-核心知识脉络 1&#xff09;根据自己电脑的CUDA版本安装对应版本的Pytorch&#xff0c;充分的使用GPU性能2&#xff09;电脑要先安装【CUDA ToolKi…

shell 脚本基本练习

一、shell 脚本写出检测 /tmp/size.log 文件如果存在显示它的内容&#xff0c;不存在则创建一个文件将创建时间写入。 1. 创建ex1.sh文件 [rootopenEuler mnt]# vim ex1.sh创建如下&#xff1a; 2. 根据题目编写脚本 n"/tmp/siz.log"if [ -f "$n" ] thenc…

CNN-GRU-MATT加入贝叶斯超参数优化,多输入单输出回归模型

CNN-GRU-MATT加入贝叶斯超参数优化&#xff0c;多输入单输出回归模型 目录 CNN-GRU-MATT加入贝叶斯超参数优化&#xff0c;多输入单输出回归模型预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现贝叶斯优化CNN-GRU融合多头注意力机制多变量回归预测&#xff…

Oracle 分区索引简介

目录 一. 什么是分区索引二. 分区索引的种类2.1 局部分区索引&#xff08;Local Partitioned Index&#xff09;2.2 全局分区索引&#xff08;Global Partitioned Index&#xff09; 三. 分区索引的创建四. 分区索引查看4.1 USER_IND_COLUMNS 表4.2 USER_INDEXES 表 五. 分区索…

​HPM6700——以太网通信lwip_udpecho_freertos_socket

1. 概述 本示例展示在FreeRTOS系统下的UDP回送通讯 PC 通过以太网发送UDP数据帧至MCU&#xff0c;MCU将接收的数据帧回发至PC 2. 硬件设置 使用USB Type-C线缆连接PC USB端口和PWR DEBUG端口 使用以太网线缆连接PC以太网端口和开发板RGMII或RMII端口 3. 工程配置 以太网端…

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

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

[leetcode]链表基础回顾

一.创建带头节点的链表 #include <iostream> #include <string> #include <algorithm> using namespace std; typedef struct Node { char ch; Node* next; }*LinkList,ListNode; void printLinkList(LinkList& head) { LinkList p head…