zoukankan      html  css  js  c++  java
  • DirectX 矩阵

    基础:

    下标:第一个下标为该元素所在行的索引,第二个下标为该元素所在列的索引。如下图所示

    image

    行向量和列向量:只有单行的向量称为行向量,只有单列的称之为列向量。

    相等

    维数和元素都相等

    数乘(与标量相乘)

    每一个元素与标量相乘

    加法(矩阵+矩阵=矩阵)

    两个矩阵相应元素想加所得的矩阵,必须维数相等

    矩阵乘法(矩阵*矩阵=矩阵)

    条件:A的列数必须等于B的行数

    定义:A(m*n) B(n*p) 则乘积AB有意义,且等于一个矩阵C(m*p),其中乘积C[i][j] = A的第i个行向量 * B的第j个列向量的点积。

    单位矩阵(类似于标量1与矩阵相乘不改变矩阵)

    定义:除主对角线上的元素为1外,其它全为0

    image

    单位阵可以作为一个乘法单位(multiplicative identity) MI = IM = M

    即,用一个单位矩阵与某一个矩阵相乘,不改变该矩阵。而且,某一矩阵与单位矩阵相乘,是矩阵简洁可交换的特例,单位矩阵对于标量可以认为是矩阵中的”1”

    证明:

    image

    逆矩阵(矩阵的乘法逆运算)

    • 只有方阵才有逆矩阵
    • 一个n*n的矩阵M的逆矩阵也是一个n*n的矩阵用clip_image002[4]表示
    • 并非所有方阵都有逆矩阵
    • 一个矩阵与其逆阵的乘积为单位阵,当一个矩阵与其逆矩阵相乘时,可交换相乘次序
    • 矩阵的转置

    • 通过交换矩阵的行和列

    image

    D3DX矩阵

    编程D3DX程序时,我们通常只使用4*4的矩阵和1*4的行向量。注意,使用这两种维护的矩阵,意味着以下矩阵乘法是有意义的:

    向量-矩阵乘法。若v为1*4的行向量,T为4*4的矩阵,则乘积vT有意义,且其结果为1*4的行向量

    矩阵矩阵乘法:若T和R都为4*4的矩阵,则乘积TR和RT有意义,其结果为4*4的矩阵。注意TR和RT不一定相等。

    基本变换

    1*4向量在3d坐标系中点表示方法p = (p1,p2,p3,0

    1*4向量在3d坐标系中向量的表示方法 v = (v1,v2,v3,1) 扩展后的向量称为齐次向量,因为齐次向量即可以表示点,又可以表示向量

    向量处于齐次空间:

    image

    平移矩阵

    要想将向量(x,y,z,1)沿x轴平稳px单位,y轴平移py个单位,z轴平移pz个单位 我们只需要将该向量与以下矩阵相乘

    image

    用于创建平移矩阵的D3DX函数为D3DXMatrixTranslation

    旋转矩阵

    我们可以用如下3个矩阵分别表示绕x,y,z轴旋转θ弧度

    image

    image

    image

    旋转矩阵R的逆矩阵与其转置相等,即

    clip_image002[6]

    比例变的矩阵

    比例变的

    如果让一个向量沿x,y,z轴分别放大qx,qy,qz倍,可令该向量与如下矩阵相乘

    image

    Dx中的函数为

    image

    几何变的的组合

    矩阵变换的一个最关键的优点是,可借助矩阵乘法将几种变换组合为一个变换矩阵

    向量变换的一些函数

    D3DXVerc3TransformCoord函数对点进行变换,并假定向量第4个分量为1

    D3DXVec3TransformNormal用于向量变换,并假定向量第4个分量为0

    image

  • 相关阅读:
    centos 6,7 上cgroup资源限制使用举例
    redis sentinel哨兵的使用
    redis发布-订阅
    Golang cpu的使用设置--GOMAXPROCS
    Golang 端口复用测试
    Golang client绑定本地IP和端口
    Go并发控制--context的使用
    Go 并发控制--WaitGroup的使用
    go thrift报错问题--WriteStructEnd
    secureCRT上传本地文件到虚拟机
  • 原文地址:https://www.cnblogs.com/zhangdongsheng/p/4490777.html
Copyright © 2011-2022 走看看