专栏首页吹弹牛皮之unity程序设计吹弹牛皮之Unity 引擎基础 - 矩阵(一)

吹弹牛皮之Unity 引擎基础 - 矩阵(一)

沉迷于硬笔的练习偷懒了很长时间。过去的7月份仅仅更新了一篇文章,实在是深表遗憾。接着之前的向量篇小菜继续向下探索。谢谢大家长久来的鼓励和支持。

矩阵

定义:由m x n个标量组成的长方形数组,可以整数可以小数。如下图:

矩阵的几何解释:矩阵多用于在空间中的变换操作。

接下来的很长一段时间小菜都会和矩阵成为亲密无间的朋友。

方阵

定义:行和列数目相等的矩阵。在三维渲染里,最常使用的就是3 x 3或4 x 4的方阵。接下来的内容若无特殊说明,讨论的都是方阵。

对角矩阵

定义:一个矩阵除了对角元素外所有元素都为0,则为对角矩阵。

单位矩阵

定义:一个特殊的对角矩阵就是单位矩阵,对角元素全部为1。单位矩阵和任何矩阵相乘其结果都是原矩阵。

开始编码

基于上面的对矩阵的初步了解,开始编写小菜的自己的矩阵类。

小菜用一个2维数组来存储矩阵的行列数据(1维数组也是可以的)。三维空间的变换一般3 x 3矩阵就可以,构建4 x 4的矩阵的目的是为了区分点和向量的变换(这也是vector3额外多了一个w分量的原因),同时也为能完成一些特殊的变换操作。

接着构造访问.net的索引器,用于方便操作_matrix二维数组。

接着是构造单位矩阵

转置矩阵

定义:对于给定的 m x n 的矩阵,转置则是将原m行的元素变换为第m列 而原来的n列变换为第n行。

编码实现:

标量与矩阵的乘法

定义:矩阵和标量相乘,其结果还是在一个相同维度的矩阵中,运算过程是每个矩阵的元素与该标量相乘。

编码实现:

矩阵与矩阵的乘法

首先矩阵的乘法必须先要满足内积相同,即满足r x n 与 n x c 的行列关系才可以进行矩阵的乘法。

定义:设有 r x n的矩阵A 和一个n x c的矩阵B,他们相乘会得到一个r x c的矩阵 C = AB。C中的每一个元素Cij等于A矩阵的第i行所对应的矢量和B矩阵的第j列所对应的矢量进行矢量点乘后相加的结果。

矩阵乘法所满足的变换:

编码实现:

行矩阵与列矩阵

根据矩阵的定义,我们的向量也可以看作是矩阵。既可以看作行矩阵也可以看作列矩阵,并且通过矩阵的转置,行矩阵和列矩阵可以相互的转化。

根据矩阵的乘法规则,要想让向量和矩阵能做乘法,必须满足。

  1. 行向量要左乘 vABC
  2. 列向量要右乘 CBAv

通常:DirectX使用的是行向量,OpenGL使用的是列向量。

我们的Unity使用的也是行向量左乘规范。

行向量左乘

列向量右乘

编码行向量左乘

打印

最后方便测试输出,小菜重写了下ToString()操作。

本文分享自微信公众号 - 吹弹牛皮之unity程序设计(gh_4f97f8f53f59),作者:赵晋伟

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-08-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 吹弹牛皮之Unity 引擎基础 - 矩阵(三)

    上图中展示了p,q两个基向量(单位向量)绕原点旋转后得到的新基向量p'和q'。根据勾股定理有:

    用户7698595
  • 吹弹牛皮之Unity 引擎基础 - 四元数(二)

    上一篇的四元数内容,简单的介绍了四元数的一些基础运算,继续前篇的内容,继续扩充如下内容:

    用户7698595
  • 吹弹牛皮之Unity 引擎基础 - 矩阵(二)

    在前两篇小菜介绍了矩阵的基础和用于接下来的篇幅内容打基础的矩阵行列式运算。真正的进入矩阵的应用过程小菜就从这篇开始。

    用户7698595
  • 基于协同过滤的SVD的推荐系统

    参考论文:Using Singular Value Decomposition Approximation For Collaborative Filterin...

    张凝可
  • 透析矩阵,由浅入深娓娓道来—高数-线性代数-矩阵

    线性代数是用来描述状态和变化的,而矩阵是存储状态和变化的信息的媒介,可以分为状态(静态)和变化(动态)信息来看待。

    周陆军
  • 矩阵相乘法则和技巧

    只有当第一个矩阵(左矩阵)的列数等于第二矩阵(右矩阵)时,两矩阵才能相乘。因为得到的结果矩阵的i一行的第j个元素(Cij)是左矩阵第i行所有元素分别与右矩阵第...

    vv彭
  • 数据分析与数据挖掘 - 06线性代数

    导数是高等数学中非常重要的知识点,也是人工智能的算法应用中比较常用的一个知识,这一章我们的重点就是讲解一下导数和其求导法则。首先我们来看一下导数的基本概念:函数...

    马一特
  • 数学实验(预习)

    也可以用初等变换求逆矩阵,构造一个n行2n列的矩阵(A E),并进行初等变换,A编程单位矩阵的时候,E就变成了A的逆矩阵.

    云深无际
  • 吹弹牛皮之Unity 引擎基础 - 矩阵(三)

    上图中展示了p,q两个基向量(单位向量)绕原点旋转后得到的新基向量p'和q'。根据勾股定理有:

    用户7698595
  • 一起来学matlab-matlab学习笔记10 10_1一般运算符

    本文为matlab自学笔记的一部分,之所以学习matlab是因为其真的是人工智能无论是神经网络还是智能计算中日常使用的,非常重要的软件。也许最近其带来的一...

    DrawSky

扫码关注云+社区

领取腾讯云代金券