一.矩阵基本概念

在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;}

程序结果:

转载于:https://www.cnblogs.com/ainima/p/6331131.html

DirectX10一矩阵代数(二)相关推荐

  1. 三因素方差分析_详解方差分析表(ANOVA)(一) —— 线性回归与矩阵代数.回顾

    导读:在初学回归分析时,方差分析表(ANOVA)往往由线性回归引入.方差分析表在线性模型的显著性检验.模型选择方面有重要的应用,因此理解其各个表项的含义,以及这些表项值从何而来,对于我们能正确应用AN ...

  2. DirectX12 3D游戏开发实践(龙书)第二章_矩阵代数

    矩阵 第二章矩阵代数 矩阵代数 定义 矩阵运算 简单代数运算 矩阵乘法 定义 向量与矩阵的乘法 结合律 转置矩阵 单位矩阵 矩阵的行列式 余子阵 行列式的定义 伴随矩阵 逆矩阵 用DirectXMat ...

  3. 《纽约客》特写Jeff Dean与Sanjay:谷歌唯二11级工程师,同一台电脑上写代码

    作者:<纽约客> James Somers 翻译:新浪科技 堆堆.李明 量子位 经授权转载 | 公众号 QbitAI 最近,<纽约客>杂志写了一篇长文,描述谷歌唯二11级工程师 ...

  4. 条形码?二维码?生成、解析都在这里!

    二维码生成与解析 一.生成二维码 二.解析二维码 三.生成一维码 四.全部的代码 五.pom依赖 直接上代码: 一.生成二维码 public class demo {private static fi ...

  5. 【ReactiveX】基于Golang pmlpml/RxGo程序包的二次开发

    基于Golang pmlpml/RxGo程序包的二次开发[阅读时间:约20分钟] 一.ReactiveX & RxGo介绍 1.ReactiveX 2.RxGo 二.系统环境&项目介绍 ...

  6. 2022-2028年中国二次供水产业发展动态及投资战略规划报告

    [报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了中国二次供水行业市场行业相关概述.中国二次供 ...

  7. 2022-2028年中国二次供水设备行业研究及前瞻分析报告

    [报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了中国二次供水设备行业市场行业相关概述.中国二 ...

  8. OpenCV 笔记(08)— 二维点、三维点、基于 Mat 的 std::vector 等常用数据结构的定义和输出

    1. 定义和输出二维点 Point2f p2(3, 4);cout << "[二维点] is "<< endl << p2 << e ...

  9. python内置库之学习ctypes库(二)

    ctypes库踩坑日记2 一.自己实现一个dll文件,再用python的ctypes库调用思路1更清晰 二.生成dll文件 三.ctypes库调用 一.自己实现一个dll文件,再用python的cty ...

最新文章

  1. 公布硕士论文最新进展一(2007.3.6)
  2. python网络爬虫 - 如何伪装逃过反爬虫程序
  3. 【SSH项目实战】国税协同平台-26.分页功能编写
  4. 笔迹鉴别(5) —— 笔迹判别
  5. Hadoop安装记录(伪分布式)
  6. 【资源下载】 UC 伯克利 Chelsea Finn 博士论文(新起之秀——MAML)《Learning to Learn with Gradients》下载--2018ACM最佳博士论文下载
  7. centos安装思源黑体
  8. Diablo II中的各种hacks
  9. android 常用机型尺寸_目前主流的智能手机的屏幕尺寸与分辨率是多少?
  10. 小人物吃金币_android小游戏(1)
  11. ios开发 服务器通信协议,iOS开发之网络协议TCP/IP、HTTP
  12. C语言——二项式定理
  13. MyBatis_Plus(Spring版本笔记)
  14. linux打开文件脚本,linux脚本文件实现的功能有哪些剧本用工具打开
  15. 怎样让小孩变成机灵顾客
  16. uni-app: IPv4地址代替localhost当做项目接口请求地址,不同工作环境需要配置不同请求地址
  17. ps一键去除gif背景的jsx脚本
  18. 面试时如何回答面试官的问题
  19. B2B电商平台怎么解决大额订单在线支付问题?
  20. 5.11 使用新建填充图层制作艺术效果 [原创Ps教程]

热门文章

  1. python select模块安装_python+selenium select下拉选择框定位处理方法
  2. netcore权限控制_记录这两年是如何一步一步转型到.net core+k8s
  3. jira无法访问此网站_天津制作网站公司:更换空间对网站SEO的影响
  4. matlab中cell用法
  5. roadflow2.1版oracle,RoadFlowVue3.0.2更新日志
  6. python多久更新一次_Python Tkinter,每秒钟更新一次
  7. html设置页面大小_如何将Word文档页面大小设置为16开?
  8. pta l2-7(家庭房产)
  9. 使用Web.Config Transformation配置灵活的配置文件
  10. 去掉数组中重复的数字。