zoukankan      html  css  js  c++  java
  • Directx11学习笔记【六】 基本的数学知识----矩阵篇

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

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

    https://zh.wikipedia.org/wiki/

    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 <windows.h>
     2 #include <xnamath.h>
     3 #include <iostream>
     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) << "	";
    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.0f
    38         );
    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 }

  • 相关阅读:
    Jmeter分离登录事务的另一种方式
    数据驱动 vs 关键字驱动:对搭建UI自动化测试框架的探索
    使用jmeter往指定文件中插入一定数量的数据
    JMeter 各组件介绍以及用法
    JVM(2) Java内存溢出异常
    JVM(1) Java内存区域
    OptimalSolution(1)--递归和动态规划(4)其他问题
    MySQL开发篇(5)索引、视图、触发器、SQL中的安全问题、SQL Mode、
    OptimalSolution(1)--递归和动态规划(3)数组和字符串问题
    OptimalSolution(1)--递归和动态规划(2)矩阵的最小路径和与换钱的最少货币数问题
  • 原文地址:https://www.cnblogs.com/zhangbaochong/p/5240358.html
Copyright © 2011-2022 走看看