DirectX10一矩阵代数(二)
来源:互联网 发布:国税数据质量监控 编辑:程序博客网 时间:2024/05/14 08:08
一.矩阵基本概念
在DirectX10中,矩阵是一个非常重要的概念,这里我们主要探讨以下几个方面:
1.矩阵乘法
假设A是一个m*n矩阵,B是一个n*p的矩阵,若C = A* B,则C是一个m*p矩阵,其中C的每一个元素Ci,j = Ai,* * B*,j
2.向量-矩阵乘法
假设向量u=(x,y,z),矩阵A = [A*,1,A*,2,A*,3],则向量u与矩阵A相乘的结果为uA = xA*,1 + yA*,2 + zA*,3,这说明向量-矩阵的乘积uA等于向量的标量系数与矩阵A的行向量的线性组合。
注意:矩阵乘法满足交换律,即A(BC) = (AB)C
3.矩阵转置
对一个矩阵M的行列进行互换,即可得到该矩阵的转置(transpose)矩阵,记作MT.
4.单位矩阵
单位矩阵(identitymatrix)是一个正方形矩阵,其除了对角线上的元素为1外,其余都为0.
注意:单位矩阵的作用相当于一个乘法单位,也就是,如果A是一个m*n矩阵,B是一个n*p矩阵,I是n*n单位矩阵,那么,AI=A且IB = B
5.逆矩阵
矩阵运算中没有除法运算,但是却定义了一种逆(inverse)运算.
注意:
1.只有正方形矩阵有逆运算
2.逆矩阵记作M-1
3.并不是所有的正方形矩阵都有逆矩阵,有逆矩阵的正方形矩阵称为可逆矩阵,没有逆矩阵的正方形矩阵称为单调矩阵
4.逆矩阵若存在,必定唯一
5.矩阵与其逆矩阵相乘必为单位矩阵
6.(AB)-1 = B-1 * A-1
二.D3DX中的矩阵
1.基本类与函数
在D3DX中,我们主要使用D3DXMATRIX类表示4*4矩阵,其在D3DX中的定义如下:
typedef struct D3DXMATRIX: public D3DMATRIX{public D3DXMATRIX(){};public D3DXMATRIX(CONST FLOAT*);public D3DXMATRIX(CONST D3DMATRIX&);public D3DXMATRIX(CONST D3DXFLOAT16 *);public D3DXMATRIX(FLOAT _11,FLOAT _12,FLOAT _13,FLOAT _14,FLOAT _21,FLOAT _22,FLOAT _23,FLOAT _24,FLOAT _31,FLOAT _32,FLOAT _33,FLOAT _34,FLOAT _41,FLOAT _42,FLOAT _43,FLOAT _44,);FLOAT & operator(UINT row,UINT col) ;FLOAT operator(UINT row,UINT col) const; operator FLOAT*();operator CONST FLOAT*() const; D3DXMATRIX& operator *= (CONST D3DXMATRIX&);D3DXMATRIX& operator += (CONST D3DXMATRIX&);D3DXMATRIX& operator -= (CONST D3DXMATRIX&);D3DXMATRIX& operator *= (FLOAT);D3DXMATRIX& operator /=(FLOAT); D3DXMATRIX operator + () const;D3DXMATRIX operator - () const; D3DXMATRIX operator *(CONST D3DXMATRIX&) const;D3DXMATRIX operator +(CONST D3DXMATRIX&) const;D3DXMATRIX operator -(CONST D3DXMATRIX&) const;D3DXMATRIX operator * (FLOAT) const;D3DXMATRIX operator / (FLOAT) const; friend D3DXMATRIX operator *(FLOAT,CONST D3DXMATRIX &);bool operator ==(CONST D3DXMATRIX&) CONST;bool operator !=(CONST D3DXMATRIX&) CONST;}D3DXMATRIX,*LPD3DXMATRIX;
除了上述定义之外,D3DX库还定义了许多实用函数,分别用于获取4 x 4单位矩阵,计算转置矩阵,计算逆矩阵,以及几种不同维数的向量矩阵乘法。
分别如下:
D3DXMATRIX *D3DXMatrixIdentity(D3DXMATRIX *pOut;// 获取单位矩阵);D3DXMATRIX *D3DXMatrixTranspose(D3DXMATRIX *pOut;//输出 MTCONST D3DXMATRIX *pM;//输入M,);D3DXMATRIX *D3DXMatrixInverse(D3DXMATRIX *pOut;//输出M-1FLOAT * pDeterminent;//通常为0CONST D3DXMATRIX *pM;//输入M);D3DXVECTOR4 *D3DXVec4Transform(D3DXVECTOR4 *pOut;//输出 V*MCONST D3DXVECTOR4 *pV;//输入 VCONST D3DXMATRIX *pM;// 输入 M);
2.程序演示
注意:程序中的一些配置不再赘述,可参考
#include<D3D10.h>#include<iostream>#include<D3DX10math.h>using namespace std; ostream& operator<<(ostream& os,D3DXVECTOR4& v){os<<"{"<<v.x<<","<<v.y<<","<<v.z<<","<<v.w<<"}";return os;} ostream& operator<<(ostream& os,D3DXMATRIX& m){for (int i=0;i<4;++i){for (int j=0;j<4;++j){os<<m(i,j)<<" ";}os<<endl;}return os;} int main(){ D3DXMATRIX A(1.0f,0,0,0,0,2.0f,0,0,0,0,4.0f,0,1.0f,2.0f,3.0f,1.0f);D3DXMATRIX B; D3DXMatrixIdentity(&B);//求ó单蹋?位?矩?阵ó D3DXMATRIX C = A*B;//矩?阵ó乘?法ぁ? D3DXMATRIX D,E,F; D3DXMatrixTranspose(&D,&A);//矩?阵ó转羇置? D3DXMatrixInverse(&E,0,&A);//逆?矩?阵ó F = A * E;//向ò量?*矩?阵ó D3DXVECTOR4 P(2.0f,2.0f,2.0f,1.0f);D3DXVECTOR4 Q(2.0f,2.0f,2.0f,0.0f);D3DXVECTOR4 R,S; D3DXVec4Transform(&R,&P,&A);//R = P * AD3DXVec4Transform(&S,&Q,&A);//S = Q * A ////////////////////////////////////////////////////////////////////////// cout<<"A = "<<endl<<A<<endl;cout<<"B = "<<endl<<B<<endl;cout<<"C = A*B = "<<endl<<C<<endl;cout<<"D = transpose(A) = "<<endl<<D<<endl;cout<<"E = inverse(A) = "<<endl<<E<<endl;cout<<"F = A*E = "<<endl<<F<<endl;cout<<"P = "<<P<<endl;cout<<"Q = "<<Q<<endl;cout<<"R = P*A = "<<R<<endl;cout<<"S = Q*A = "<<S<<endl; system("pause");return 0;}
程序结果:
- DirectX10一矩阵代数(二)
- DirectX10一向量代数(一)
- DirectX10一变换(三)
- 矩阵代数_part1
- 矩阵代数_part2
- 线形代数--矩阵
- 代数笔记-第一章-矩阵
- 第一章 矩阵代数
- 数据库原理(一)—— 关系代数(二)
- 推荐矩阵代数学习资料
- 例题:求矩阵代数余子式
- 线性代数复习分析(矩阵代数运算)
- DX11编程(三):矩阵代数
- 理解矩阵(一)(二)
- 孟岩BLOG理解矩阵一、二, 三
- 代数问题3*3矩阵的逆矩阵
- 【模板】【代数】矩阵乘法和矩阵快速幂
- 线性代数中的余子式、代数余子式、行列式、伴随矩阵、逆矩阵
- 欧拉计划 第8题
- 角色刀斧砍击
- spring源码学习之路---IOC容器初始化要义之bean定义载入
- PAT 1044. Shopping in Mars
- linux 进程同步机制
- DirectX10一矩阵代数(二)
- 90后站长-关于个人站长网赚的看法
- oracle--v$lock 字段详解
- 自定义组合控件
- Linux多线程通信
- QThread信号深入挖掘
- codeforces#233_div2_B Red and Blue Balls
- 2014年开篇博文
- Linux中多线程同步