Unity | 向量、矩阵、齐次坐标

目录

一、向量点乘&叉乘

1.点乘

1.1 公式

1.2 几何意义

2.叉乘

2.1 公式

2.2 几何意义

二、矩阵点乘&叉乘

1.矩阵

2.矩阵的点乘

3.矩阵的叉乘

三、矩阵旋转

四、齐次坐标


一、向量点乘&叉乘

1.点乘

        又称内积,结果是个标量,

1.1 公式

        向量a与向量b点乘的计算公式有两个:

  1. a·b=(x1, y1, z1)·(x2, y2, z2)=x1×x2+y1×y2+z1×z2;
  2. a·b=‖a‖×‖b‖×cosβ。

1.2 几何意义

        如下图所示,当a和b两个向量点乘得到的结果为正数时,两者的方向比较一致,并且这个正数越大,a和b两个向量的方向越一致,直至得到的正数最大时,两者的方向完全相同。当a和b两个向量点积得到的结果为负数时,a和b两个向量的方向则相反,得到的负值越小,a和b的方向相反的程度越厉害,当负数最小时,两者方向完全相反。 

        点乘除了可以判断两个向量的方向外,还可以用来计算β的角度(从而计算是否平行或者垂直),即:β=arcos((a·b)/(|a|×|b|))。在Unity中为:β=Mathf.Acos(Vector3.Dot(a, b)/(a.magnitude×b.magnitude))

        点乘还可以用来计算向量在某个方向上的投影长度,从而实现向量的投影变换。

2.叉乘

        又称外积、向量积。与Vector3点积一样,Vector3的叉乘也是向量与向量之间的计算公式,不同的是,叉乘的结果不再是一个数值,而是一个同样维度的向量。

2.1 公式

        c=a×b=(a1, a2, a3)×(b1, b2, b3)=(a2×b3-a3×b3, a3×b1-a1×b3, a1×b2-a2×b1)

        式中,两个向量a、b叉乘后,得到与a、b向量形成的平面垂直的向量c。

        c的长度又可以用另一个公式来表示,即a×b的长度等于向量的大小与向量的夹角sin值的积:|c|=|a×b|=|a|×|b|×sinβ。

  • 当c的长度为0时,a和b是两个相互平行的矢量,当a和b的叉乘的模等于a的模乘以b的模时,a和b是两个互相垂直的向量。
  • a向量和b向量叉乘的模就是a向量和b向量形成的四边形面积。

2.2 几何意义

  1. 得到与两向量形成的平面垂直的向量;
  2. 判断两向量是否平行或垂直;
  3. 向量叉乘后的模就是四边形的面积。

二、矩阵点乘&叉乘

1.矩阵

  • 对角矩阵:即只有行号和列号相同的位置有数字,其他位置都为0的方阵矩阵
  • 单位矩阵:即行号和列号相同的对角线上的数字都为1,其他位置都为0的方阵矩阵
  • 转置矩阵:就是把矩阵沿着对角线翻转一下,由于我们常用的是“方阵”矩阵,所以转置矩阵后,方阵矩阵还是同样的大小,只是将对角线两侧的数字进行了对调。

2.矩阵的点乘

        数字和矩阵相乘,直接代入矩阵中的所有变量即可,这种标量的乘法其实就是扩大矩阵中的所有数值。结果是个矩阵。

        矩阵与矩阵点乘,英文hadamard product,因此又称哈达码积。要求相乘的两个矩阵A和B大小完全相同,即A、B大小都为M*N。结果可能是矩阵、列向量、行向量。

A \cdot B=\begin{bmatrix} a_{11}& a_{12}\\ a_{21} & a_{22} \end{bmatrix}\cdot \begin{bmatrix} b_{11}& b_{12}\\ b_{21} & b_{22} \end{bmatrix}= \begin{bmatrix} a_{11} b_{11}&a_{12} b_{12}\\ a_{21} b_{21}& a_{22} b_{22}\end{bmatrix}

3.矩阵的叉乘

        一般而言,矩阵相乘表示的是矩阵的叉乘,叉乘的结果是个矩阵。矩阵相乘(A矩阵×B矩阵)需要一些附加条件,条件是矩阵A的列数必须与矩阵B的行数相等,否则无法相乘,或者说相乘是无意义的。

A \times B=\begin{bmatrix} a_{11}& a_{12}\\ a_{21} & a_{22} \end{bmatrix}\times \begin{bmatrix} b_{11}& b_{12}\\ b_{21} & b_{22} \end{bmatrix}= \begin{bmatrix} a_{11} b_{11}+a_{12}b_{21} &a_{11} b_{12}+a_{12}b_{22}\\ a_{21} b_{11}+a_{22}b_{21}& a_{21} b_{12}+a_{22}b_{22} \end{bmatrix}

        矩阵相乘后得到的矩阵,其中每个位置Cij(即C矩阵的第i行第j列)都是A矩阵的第i行向量与B矩阵的第j列向量点乘的计算结果。

        当一个矩阵与某个矩阵相乘等于单位矩阵时,这“某个”矩阵就为该矩阵的“逆矩阵”。如果一个矩阵有逆矩阵,则称这个矩阵为可逆矩阵;相反,如果这个矩阵没有逆矩阵,那么就称这个矩阵为不可逆矩阵。

三、矩阵旋转

        我们可以说矩阵是由标准矩阵旋转并缩放而来的,这是矩阵的几何解释。对于标准矩阵来说,旋转缩放后形成另一个矩阵,这个结果矩阵就是我们计算的“变换矩阵”。对于任何一个向量来说,乘以“变换矩阵”就能得到我们所要表达的旋转和缩放值。

        一个矩阵想要旋转β°,那么旋转矩阵的第一行是[cosβ,sinβ],第二行是[-sinβ,cosβ],它们分别表达了标准向量(1,0)和(0,1)旋转β°后的向量。如下图所示。

        任何向量乘以这个旋转矩阵都会在标准坐标系中以标准轴为基准旋转β°。

四、齐次坐标

        齐次坐标就是将一个原本是n维的向量用一个n+1维的向量来表示,例如三维向量用四维向量来表示,即Vector3变为Vector4,除x、y、z外,又多了一个w,齐次矩阵也是同样的道理,n维表达不了的事情可用n+1维来表达,3×3矩阵表达不了的事情可以用4×4来表达

        在欧几里得几何空间里,两条平行线永远都不会相交(引自《齐次坐标》)。但是在投影空间中,在无限远处两条平行线看起来会相交于一点。

        由August Ferdinand Möbius提出的齐次坐标(Homogeneous Coordinates)让我们能够在投影空间里对图像进行几何处理,齐次坐标用N+1个分量来描述N维坐标。比如,2D齐次坐标是在笛卡儿坐标(X,Y)的基础上增加一个新分量w,变成(x,y,w),其中笛卡儿坐标系中的大X、Y与齐次坐标中的小x、y有如下对应关系:X=x/wY=y/w。笛卡儿坐标中的点(1,2)在齐次坐标中就是(1,2,1)。如果这点移动到无限远(∞,∞)处,在齐次坐标中就是(1,2,0),这样就避免了用没意义的“∞”来描述无限远处的点。

        点(1,2,3)、(2,4,6)和(4,8,12)对应笛卡儿坐标中的同一点(1/3,2/3)。任意数量积的(1a,2a,3a)始终对应笛卡儿坐标中的同一点(1/3,2/3)。因此这些点是“齐次”的,因为它们始终对应笛卡儿坐标中的同一点。换句话说,齐次坐标描述的是缩放不变性(Scale Invariant)。

        矩阵乘法很强大,可以表达旋转、缩放、投影、镜像、切变,但无法表达平移(由于矩阵乘法的性质,任何矩阵乘以零向量都是零,因此零向量无法平移),怎么办?齐次矩阵恰好可以满足我们的需求,齐次矩阵在原来的维度上增加了一个维度,用多出来的那个维度来表达平移操作。

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

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

相关文章

opencv读取图像数据并修改通道转变内存连续

opencv读取图像数据并修改通道转变内存连续

基于vscode的ros开发

Part1前言 ROS(机器人操作系统)是一个开源的机器人软件平台,旨在提供一套通用的工具和库,帮助开发人员创建机器人应用程序。ROS提供了用于构建机器人系统的库、工具、驱动程序、通信协议和软件包管理系统。 以下是ROS的一些主要特…

安科瑞智能母线监控在数据中心的应用

引言: 近年来,随着母线槽在建筑及工厂的配电中越来越广泛,母线槽场景运用的越多,随着数据中心建设的快速发展和更高需求,智能母线系统逐渐被应用于机房的末端配电中,具有电流小、插接方便、智能化程度高等…

快消品行业企业如何选择适合自己的订单管理系统源码

快消品行业企业在选择适合自己的订单管理系统源码时,需要考虑以下五个方面: 首先,企业需要考虑订单管理系统的功能是否能够满足自身的需求。订单管理系统应该具备订单录入、订单查询、订单处理、订单跟踪、进销存管理、临期提醒等基本功能&am…

sodner 论文复现

论文:A Span-Based Model for Joint Overlapped and DiscontinuousNamed Entity Recognition_pepsi_w的博客-CSDN博客 因为搞这个复现的环境弄了很久才跑通,记录一下。 介绍一下我的环境:window10 cpu pycharm miniconda 1. 下载代码文件&a…

VMware15.5版本虚拟机安装Linux Centos 7系统详细步骤

1.首先准备好Centos7.6安装文件,安装文件可百度搜索或在阿里镜像站中下载。 阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 2.新建虚拟机. 1选择自定义,点下一步。 2硬件兼容性选择15.x,,点下一步。 3选择稍后安装操作系统&…

Mac OS 源码编译安装Nginx

下载软件 访问地址: https://nginx.org 根据自己的需求下载合适的安装包 首先建个临时目录 nginx-src 并下载所需软件的源码进行配置 mkdir nginx-src cd nginx-src wget https://nginx.org/download/nginx-1.18.0.tar.gz wget https://ftp.pcre.org/pub/p…

On the Properties of Neural Machine Translation: Encoder–DecoderApproaches

摘要 Neural machine translation : 神经机器翻译。 神经机器翻译模型经常包含编码器和解码器:an encoder and a decoder. 编码器: 从一个变长输入序列中提取固定长度的表示。a fixed-length representation. 解码器:从表示中…

校招失败后,在小公司熬了 2 年终于进了华为,竭尽全力....

其实两年前校招的时候就往华为投了一次简历,结果很明显凉了,随后这个理想就被暂时放下了,但是这个种子一直埋在心里这两年除了工作以外,也会坚持写博客,也因此结识了很多优秀的小伙伴,从他们身上学到了特别…

数学建模学习之发动机最优生产计划模型求解

问题重述 某工厂向用户提供发动机,按合同规定,其交货数量和日期是:第一季末交 40 台第二季末交 60 台,第三季末交 80 台。工厂的最大生产能力为每季 100 台,每季的生产费用是(元),此处 为该季生产发动机的台数。若工…

Ribbon 负载均衡服务调用

文章目录 1 SpringCloud Load Balance2 总结:3 Ribbon工作流程:4 自定义Ribbon 负载均衡算法:4.1 iRule接口:4.2 Ribbon自带的负载均衡算法:4.3 负载均衡算法替代:4.3.1、在非启动类包及子包下创建配置类4.3.2、定义4.…

如何将idea里面的项目上传到gitee仓库里面?

目录 第一步,在Gitee这边新建一个仓库 第二步,添加ssh公钥 第三步,将idea上面的项目上传到仓库。 第四步,刷新gitee这边的网页就可以看到我们上传的项目了哦。 总结 本篇文章是用来记录我是如何将idea上面的项目上传到gitee仓库…