2_矩阵_《3D图形编程基础——基于DirectX11》笔记

二、矩阵

​ 在三维计算机图形学中,使用矩阵描述几何变换,比如平移,旋转,缩放等;通过运算将向量或点从一个空间转换到另一个空间。本章讲解矩阵的概念及其运算。


目标:

  1. 矩阵的定义
  2. 矩阵的运算
  3. XNA库中矩阵的表示和操作

2.1 矩阵的定义

m × n 矩阵是一个由m行、n列数字组成的二维表。表示如下:

(1) A = A m n = ( a i j ) m × n = | a 00 a 0 ( n 1 ) a 10 a 1 ( n 1 ) a ( n 1 ) 0 a ( n 1 ) ( n 1 ) |

​ 行数和列数相同的矩阵叫做方阵,接下来主要讨论方阵。

2.2 矩阵的运算

2.2.1 矩阵相等、加减法和数乘

  • 如果矩阵A和矩阵B维数相同,并且所有对应位置元素都相同,则称这两个矩阵相等,记作 A = B .
  • 矩阵数乘: C = k A = ( k a i j ) m n
  • 矩阵加减法的前提是矩阵维度相同: C = A + B = ( a i j + b i j ) m n

2.2.2 矩阵乘法

​ 只有当矩阵A中的列数与矩阵B中的行数相等时,矩阵乘法才有意义。乘法公式为:

(2) C = A m n B n p = ( c i j ) m × p , c i j = k = 0 n 1 a i k × b k j

​ 矩阵乘法不满足交换律。

2.2.3矩阵转置

​ 把矩阵 A 的行转换成相应的列,得到的新矩阵称为 A 的转置矩阵,记作 A T

​ 矩阵转置有以下性质:

  • ( A T ) T = A
  • ( A + B ) T = A T + B T
  • ( A B ) T = B T A T (要证明此性质,只需将矩阵元素展开,比较对应项是否相等)

2.3 单位矩阵

​ 定义:主对角线元素为1,其余元素为0的方阵。n阶单位矩阵记作 I n E n .

2.4 逆矩阵

​ 对于 n × n 方阵 A ,若存在另一个 n × n 方阵 B ,使得 A B = B A = I ,则称 A为可逆矩阵,B为A的逆矩阵,记作 A 1

​ 矩阵A的逆矩阵存在,当且仅当其行列式 d e t ( A ) 0 .

2.5 XNA矩阵

​ XNA库中,最关键的一个类是XMMATRIX,它是通过支持SIMD的SSE及其扩展指令集的支持库Intrisics实现的,是一个实现与平台相关的,非常复杂的,进行16字节对齐的,映射到SSE寄存器的类型。

​ 在XNA数学库中,还定义了另外一些数据结构来表示矩阵,有XMFLOAT3X3,XMFLOAT4X3,XMFLOAT4X4,XMFLOAT4X3A,XMFLOAT4X4A等。在编写程序时,最好避免直接使用XMMATRIX作为类或者结构体的数据成员,而是使用XMFLOAT*X*。

​ 因为对XMMATRIX类型动态分配内存(从堆中分配内存)时可能会出现问题。XMMATRIX是按16字节对齐的,而在X86系统中,堆只能按8字节对齐(但在X64系统中,所有堆都是按16字节对齐的)。

特别的,在X86系统中,XMMATRIX不能再Vector中使用,因为X86系统按8字节对齐的特性决定了按16字节对齐的函数参数不能进行值传递,这会引起编译器报告一个代码未“C2719”的错误。

​ 当XMMATRIX类型变量是在栈中分配,或者是放在数据段中(如作为全局变量)时,编译器会保证变量对齐。在堆中使用XMMATRIX时,可以使用_aligned_molloc和_ _alignedfree来分配和释放内存以保证字节对齐。

猜你喜欢

转载自blog.csdn.net/renjiewen1995/article/details/79164964