博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Directx11学习笔记【六】 基本的数学知识----矩阵篇
阅读量:7096 次
发布时间:2019-06-28

本文共 2226 字,大约阅读时间需要 7 分钟。

参考dx11龙书 Chapter2 matrix algebra(矩阵代数)

 

 关于矩阵的一些基本概念定理(例如矩阵加减乘法,逆矩阵,伴随矩阵,转置矩阵等)可以参考维基百科

 

XNA MATRICES

Matrix Types

 

在xna math中代表一个4*4的矩阵,我们使用XMMATRIX

 

当在类中存储数据时使用XMFLOAT4X4

 

用XMMatrixSet创建,原型为

 

XMMATRIX XMMatrixSet(FLOAT m00,FLOAT m01,FLOAT m02,FLOAT m03,

 

                FLOAT m10,FLOAT m11,FLOAT m12,FLOAT m13,

 

              FLOAT m20,FLOAT m21,FLOAT m22,FLOAT m23,

 

                FLOAT m30,FLOAT m31,FLOAT m32,FLOAT m33,

 

            );

 

 

 

下面是一些Matrix Functions

 

XMMATRIX XMMatrixIdentity();//单位矩阵

 

BOOL XMMatrixIsIdentity(CXMMATRIX M);//判断是否是单位矩阵

 

XMMATRIX XMMatrixMultiply(CXMMATRIX A,CXMMATRIX B);//矩阵相乘

 

XMMATRIX XMMatrixTranspose(CXMMATRIX M);//转置矩阵

 

XMVECTOR XMMatrixDeterminiant(CXMMATRIX M);//矩阵的行列式

 

XMMATRIX XMMatrixInverse(XMVECTOR *pDeteminiant,CXMMATRIX M);//逆矩阵

 

下面是dx11龙书给出的测试代码:

1 #include 
2 #include
3 #include
4 using namespace std; 5 6 ostream& operator<<(ostream &os, FXMVECTOR v) 7 { 8 XMFLOAT4 dest; 9 XMStoreFloat4(&dest, v);10 os << "(" << dest.x << "," << dest.y << "," << dest.z << ")";11 return os;12 }13 14 ostream& operator<<(ostream &os, CXMMATRIX m)15 {16 for (int i = 0; i < 4; ++i)17 {18 for (int j = 0; j < 4; ++j)19 {20 os << m(i, j) << "\t";21 }22 os << endl;23 }24 return os;25 }26 27 int main()28 {29 if (!XMVerifyCPUSupport())30 {31 cout << "xna math not supported" << endl;32 return 0;33 }34 XMMATRIX A(1.0f,0.0f,0.0f,0.0f,35 0.0f,2.0f,0.0f,0.0f,36 0.0f,0.0f,4.0f,0.0f,37 1.0f,2.0f,3.0f,1.0f38 );39 XMMATRIX B = XMMatrixIdentity();40 XMMATRIX C = A * B;41 XMMATRIX D = XMMatrixTranspose(A);42 XMVECTOR det = XMMatrixDeterminant(A);43 XMMATRIX E = XMMatrixInverse(&det,A);44 XMMATRIX F = A * E;45 46 cout << "A = " << endl << A << endl;47 cout << "B = " << endl << B << endl;48 cout << "C = A*B = " << endl << C << endl;49 cout << "D = transpose(A) = " << endl << D << endl;50 cout << "det = determinant(A) = " << det << endl << endl;51 cout << "E = inverse(A) = " << endl << E << endl;52 cout << "F = A*E = " << endl << F << endl;53 54 return 0;55 }

 

转载地址:http://ejhql.baihongyu.com/

你可能感兴趣的文章
WEB前端底层知识之浏览器是如何工作的(2)--渲染引擎 BY: linFen
查看>>
ActionBar的简单应用
查看>>
IE11下不能引入外部css的解决方法
查看>>
java web 答辩总结
查看>>
BZOJ 1432: [ZJOI2009]Function(新生必做的水题)
查看>>
GUI测试含义
查看>>
javabean使用技巧
查看>>
JS/JQ综合总结
查看>>
CGAffineTransform相关函数
查看>>
字符编码与字符集区别与联系(网页/PHP文件/MYSQL数据库乱码问题)
查看>>
黑马程序员-----const和readonly的区别
查看>>
转载:基于MapXtreme的鹰眼功能
查看>>
黄聪:远程序桌面登录的.NET(C#)开发
查看>>
JMeter聚合报告(Aggregate Report)理解
查看>>
线性基
查看>>
C# 多线程Thread.IsBackground=True的作用
查看>>
Oracle数据库安装问题记录
查看>>
Error:flask_sqlalchemy
查看>>
什么是orm:用面向对象操作数据库
查看>>
android编程:解决异常“android.view.InflateException: Binary XML file line # : Error inflating class”...
查看>>