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

news2024/11/24 2:21:01

目录

一、向量点乘&叉乘

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.coloradmin.cn/o/745265.html

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

相关文章

LIS医学检验信息系统 智慧检验实验室系统源码

医学检验信息系统(LIS)涵盖实验室的全部管理流程,包括从检验申请、标本采集、实验检测、报告发布的完整流程,以及质控管理、科室事务、试剂管理等功能,遵循医学实验室认可标准ISO15189的要求规范,适合各种实验机构的业务流程。 …

【MySQL】MySQL 数据类型,数值、日期和时间、字符串类型,创建数据表,删除数据表

作者简介: 辭七七,目前大一,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖&#x1f…

在Windows server 2012上使用virtualBox运行CentOS7虚拟机,被强制暂停

文章目录 问题场景排查过程处理解决事后反思 问题场景 我们的平台服务使用docker部署,使用docker-compose进行管理,部署到CentOS7的服务器里平台部署到客户环境时,一小部分客户,使用自己机房或单独的服务器。很多客户不愿意采购新…

进程之间的数据交互(使用管道和套接字实现进程通信)

本篇目录 进程通信的方法有哪些C语言使用管道实现进程通信使用管道进行实时通信 C语言使用套接字进行进程通信 进程通信的方法有哪些 进程通信是指在操作系统中,不同进程之间进行数据传递、信息共享和协调工作的方法。以下是常见的进程通信方法: 管道&a…

Linux网络第五章——YUM和NFS共享服务—YUM

YUM简介: 是一个专门为了解决包的依赖关系而存在的软件包管理器。 可以一键下载,一键安装和卸载。yum 是改进型的 RPM 软件管理器, 它解决了 RPM 所面临的软件包依赖问题。 yum 在服务器端存有所有的 RPM 包,并将各个包之间的依…

相比传统ERP,基于项目的ERP系统有何不同?

服务型企业是独特的以人为本的组织,依靠员工来销售、配置和提供一系列的产品和服务,这通常是以项目或合同为基础。 在这样一个环境中,服务型企业的基本财务要求与传统的制造和供应链型企业有很大的不同。 基于项目的企业需要管理资源&#x…

2023最新 Navicat 16.2.3 安装和学习试用连接Redis教程详解

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1f33…

IIS8 安装 .net1.1

直接上正文; 一 安装补丁 安装顺序: 1 dotnetfx.exe 2 NDP1.1sp1-KB867460-X86 3 NDP1.1sp1-KB886903-X86 .NET_Framework_Cleanup_Tool.zip(这个是卸载.net framework的软件,后面可能会用) 链接:ht…

ubuntu软件商店换阿里源,并解决更新源报错-->无法验证下列签名: NO_PUBKEY 3B4FE6ACC0B21F32

目录 一、背景 二、给源文件备份 三、更新源 四、解决报错 五、继续更新源 六、完成更新,下载应用 一、背景 重装了个ubuntu,发现软件商店用不了,打算换源。 二、给源文件备份 1)登录ubuntu系统,打开终端&…

mybatis双重foreach实现遍历map中的两个list数组

文章目录 实现背景:前端传值的格式Debug断点调试java如何解析json对象第一步 JSONArray.fromObject()第二步 遍历jsonArray第三步 mybatis双重foreach foreach标签说明最终效果 实现背景: 前端传值时可能会有多个字段传递过来,需要后台将这多…

SpringBoot + WebSocket+STOMP指定推送消息

目录 一、前提条件1.2 环境要求1.3 依赖 二、相关工具类准备2.1 发送消息载体2.2 接收消息载体2.3 消息处理接口2.4 为 STOMP 消息传递配置 Spring 三、前端部分四、效果 一、前提条件 本文将简单的描述SpringBoot WebSocketSTOMP指定推送消息场景,不包含信息安全加…

搭建FRP内网穿透服务器来远程访问本地windows/linux中的web服务

什么是FRP? FRP 是一个免费开源的用于内网穿透的反向代理应用,它支持 TCP、UDP 协议, 也为 http 和 https 协议提供了额外的支持。 FRP有服务端和客户端,你将服务端安装在你买的便宜云服务器上,FRP客户端安装在你自己的…

数据标注是什么?

关于数据标注您需要了解的一切——专家解答:澳鹏产品管理总监Meeta Dash 人工智能(AI)的质量取决于对其予以训练所使用的数据。由于训练数据的质量和数量直接决定AI算法的成败,因此,对于一个AI项目,平均80…

简单线性回归评估指标+R Squared

使得每一个数据集尽可能的小 均方误差MSE:(平方和取平均值) 均方根误差RMSE:(平方和取平均值开根号):平均误差值 平均绝对误差MAE:(绝对值取平均)&#xff1a…

Misc题目总结

目录 [WUSTCTF2020]girlfriend 手机键盘隐写: [GUET-CTF2019]zips setup.sh文件的运行方法: [MRCTF2020]千层套路 重复解zip加密压缩包脚本: 根据RGB坐标构造二维码脚本: [DDCTF2018](╯□)╯︵ ┻━┻ [WUSTC…

COT、COT-SC、TOT 大预言模型思考方式||底层逻辑:prompt设定

先讲一下具体缩写的意思 COT-chain of thoughts COT-SC (Self-consistency) Tree of thoughts:Deliberate problem solving with LLM 我理解其实不复杂 1. 最简单的是:直接大白话问一次 (IO) 2. 进阶一点是:思维链,…

wx.getUserProfile too frequently 问题

接口调用频率规范 概念介绍 小程序wx接口可分为“普通接口”和“限频接口”。 “限频接口”指的是一个用户在一段时间内不允许频繁调用的wx接口,此类接口一般会调用到微信后台系统资源,为了保护系统,同时防止用户资源被滥用,开…

C语言进阶之字符串函数和内存函数的介绍及部分函数的模拟实现

字符串函数和内存函数 1.字符串函数介绍1.1 strlen1.2 strcpy1.3 strcat1.4 strcmp1.5 strncpy1.6 strncat1.7 strncpy1.8 strstr1.9 strtok1.10 strerror1.11 字符分类函数 2.内存函数2.1 memcpy2.2 memmove2.3 memcmp 3.函数的模拟实现3.1 模拟实现strlen3.2 模拟实现strcpy3…

2023年上半年鲁大师手机流畅排行榜:OPPO Find X6 Pro稳居榜首,iQOO Neo8 Pro紧随其后

随着科技的不断进步,手机的流畅性在用户选择手机时也变得越来越重要。 在2023年上半年的手机流畅排行榜中,OPPO Find X6 Pro以219.98的得分稳居榜首。紧随其后的是iQOO Neo8 Pro,得分为219.73。 接下来,让我们一起来看看这份排行榜…

小白白也能学会的 PyQt 教程 —— 实战简易计算器

文章目录 导言一、从 0 到 1:简易计算器实现1、功能实现2、代码分析3、实现效果 二、由简入繁:优化简易计算器的 UI1、开始布局2、实现 Driver3、Driver 代码4、效果展示 总结 导言 PyQt5 是一个用于创建桌面应用程序的 Python 库,它提供了丰…