当前位置: 首页 > news >正文

WebGL数学手记:矩阵基础

一、矩阵的定义

矩阵,数学术语。在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合。

1.英文发音(Matrix)

Matrix的发音类似于中文的[美吹克斯],知道它的发音。方便后期看教程时能听懂别人讲什么。

2.定义

由 m × n 个数aij排成的m行n列的数表称为m行n列的矩阵,简称m × n矩阵。记作:

这m×n 个数称为矩阵A的元素,简称为元,数aij位于矩阵A的第i行第j列,称为矩阵A的(i,j)元,以数 aij为(i,j)元的矩阵可记为(aij)或(aij)m × n,m×n矩阵A也记作Amn。

3.单位矩阵

二、矩阵运算

1.矩阵乘法

1.1前提条件

矩阵A的列数 = 矩阵B的行数
如果A是m×n矩阵,B必须是n×p矩阵,结果矩阵C将是m×p矩阵

1.2计算公式

对于矩阵C = A × B,其中A是m×n矩阵,B是n×p矩阵:

矩阵C的第i行第j列元素cij计算公式为:
cij = ai1*b1j + ai2*b2j + ... + ain*bnj = Σ(aik * bkj) (k=1到n)

 2.转置矩阵

将矩阵的行列互换得到的新矩阵称为转置矩阵,转置矩阵的行列式不变。

的行列互换之后得到的矩阵,称为的转置矩阵,记作_A{T} 

例如,

3.逆矩阵

对于一个n×n的方阵A,如果存在另一个n×n矩阵B,使得A × B = B × A = I

其中I是单位矩阵,那么:

  • 矩阵A称为可逆矩阵(或非奇异矩阵)

  • 矩阵B称为A的逆矩阵,记作A⁻¹

3.1存在意义 

类似于倒数的概念,在几何运算中常用于撤回的操作,比如有一个矩阵\begin{vmatrix} &0 & -1 \\ &1 & 0 \end{vmatrix} 这个矩阵的线性变换是将坐标系逆时针旋转90(下面有讲到旋转矩阵),这时候有一个向量(1,1)乘这个矩阵,相当于逆时针旋转90度得到(-1,1)

 \begin{vmatrix} &0 & -1 \\ &1 & 0 \end{vmatrix} *\begin{vmatrix} 1 \\ 1 \end{vmatrix}  = \begin{vmatrix} -1 \\ 1 \end{vmatrix}

在普通的实数运算中 一个变量x 乘 2 再乘 \frac{1}{2} 最终的结果是不变的,在向量的运算中也是这样

\begin{vmatrix} &0 & -1 \\ &1 & 0 \end{vmatrix}的逆矩阵是\begin{vmatrix} &0 & 1 \\ &-1 & 0 \end{vmatrix}

 \begin{vmatrix} &0 & 1 \\ &-1 & 0 \end{vmatrix} *\begin{vmatrix} -1 \\ 1 \end{vmatrix}  = \begin{vmatrix} 1 \\ 1 \end{vmatrix}

三、几何意义

❗直白来说就是有一个矩阵A,让向量发生线性转换

1.平移矩阵

假设有一个平面点(x,y),要做一个平移(x+tx,y+ty),把坐标(x,y)当成一个2x1的矩阵去找刚刚好的一个矩阵,因为2x2的矩阵不满足这样一个矩阵,就在3x3的矩阵中刚好找到这样的一个矩阵 

[x']   [ 1  0  tx ] [x]   [x + tx]
[y'] = [ 0  1  ty ] [y] = [y + ty]
[1 ]   [ 0  0  1  ] [1]   [  1   ]

所以下面这个矩阵通常就叫做平移矩阵 

[ 1  0  tx ]
[ 0  1  ty ]
[ 0  0  1  ]

同样的道理,如果在三维坐标中平移矩阵就是

[ 1  0  0  tx ]
[ 0  1  0  ty ]
[ 0  0  1  tz ]
[ 0  0  0  1  ]

 ❓为什么需要矩阵多加一行和一列

  1. 不加的话矩阵只能表示线性变换(旋转、缩放、剪切等)

  2. 平移是仿射变换,不是线性变换

  3. 通过增加一维(w分量),可以将平移表示为线性变换

2.缩放矩阵

[x']   [ sx  0] [x]   [x · sx]
[y'] = [ 0  sy] [y] = [y · sy]
//二维
[ sx 0 ]
[ 0  sy]
//三维
[ sx 0  0 ]
[ 0  sy 0 ]
[ 0  0  sz]

3.旋转矩阵 

3.1绕X轴旋转(θ角度)

透视视角
x轴视角
[x']   [ 1  0     0    ] [x]   [x]
[y'] = [ 0  cosθ -sinθ ] [y] = [cosθy -sinθz]
[z'] = [ 0  sinθ  cosθ ] [z] = [sinθy + cosθz][ 1  0     0   ]
[ 0  cosθ -sinθ]
[ 0  sinθ  cosθ]

如果上面的不好理解的话就假设θ再小一点儿

旋转后y值坐标为向量的模乘sin(α+θ)

由三角函数sin(α+β) = sinαcosβ+ cosαsinβ、 sin(α-β) = sinαcosβ - cosαsinβ可得

y' = ycosθ + xsinθ       【💡y= sinα; x = cosα】

因为上图是逆时针旋转的,也就是说 θ是负数,所以真实的情况是

y' = ycosθ - xsinθ

以此类推可得出下面绕y轴旋转和绕z轴旋转的旋转矩阵 

3.2绕Y轴旋转(θ角度)

[ cosθ  0  sinθ]
[ 0     1  0   ]
[ -sinθ 0  cosθ]

 3.3绕Z轴旋转(θ角度)

[ cosθ -sinθ  0]
[ sinθ  cosθ  0]
[ 0     0     1]//二维的旋转矩阵
[ cosθ -sinθ]
[ sinθ  cosθ]


http://www.mrgr.cn/news/97830.html

相关文章:

  • React八案例上
  • python爬虫:DrissionPage实战教程
  • 柑橘病虫害图像分类数据集OrangeFruitDataset-8600
  • STM32——I2C通讯(软件模拟)
  • 探秘 Svelte+Vite+TS+Melt - UI 框架搭建,开启高效开发
  • PostgreSQL-数据库的索引 pg_operator_oid_index 损坏
  • SpringBoot 整合 MCP
  • JS 箭头函数
  • 【设计模式】面向对象开发学习OOPC
  • Apache Nifi安装与尝试
  • 研究嵌入式软件架构时遇到的初始化堆栈溢出问题
  • 3 版本控制:GitLab、Jenkins 工作流及分支开发模式实践
  • LeetCode Hot100 刷题笔记(2)—— 子串、普通数组、矩阵
  • 【回眸】Linux 内核 (十六) 之 多线程编程 下
  • 中间件-消息队列
  • C# 设置Excel中文本的对齐方式、换行、和旋转
  • 【HTML】纯前端网页小游戏-戳破彩泡
  • IDEA :物联网ThingsBoard-gateway配置,运行Python版本,连接thingsboard,接入 MQTT 设备
  • 以普通用户身份启动pure-ftpd服务端
  • js chrome 插件,下载微博视频