# Matrix

  • 描述

    矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,在计算机图形学中,常用作物体位置、运动等数学描述

# 构造函数

# Matrix(rowNum, colNum)

  • 描述

    用于构造一个rowNum行,colNum列的零矩阵。

  • 参数

    参数名 数据类型 说明
    rowNum int 矩阵行数
    colNum int 矩阵列数
  • 返回值

    数据类型 说明
    Matrix 返回Matrix(rowNum, colNum)的零矩阵
  • 示例

from common.utils.mcmath import Matrix
q = Matrix(3, 4)

# 静态方法

可以直接通过Matrix.MethodName()调用的静态方法,无需创建实例。

# CreateEye

  • 描述

    创建一个单位矩阵

  • 参数

    参数名 数据类型 说明
    rowNum/colNum int 矩阵行/列数
  • 返回值

    数据类型 说明
    Matrix 返回Matrix(num, num) 的单位矩阵
  • 示例

from common.utils.mcmath import Matrix
newMatrix = Matrix.CreateEye(3)

# Create

  • 描述

    通过数字列表创建一个矩阵

  • 参数

    参数名 数据类型 说明
    data list(list(int/float)) 矩阵数据源
  • 返回值

    数据类型 说明
    Matrix 返回Matrix(len(data), len(data[0])) ,数据为data的矩阵
  • 示例

from common.utils.mcmath import Matrix
data = [[1,2,3], [4,5,6], [7,8,9]]
newMatrix = Matrix.Create(data)

# FromEulerXYZ

  • 描述

    创建欧拉角对应的旋转矩阵,以xyz的旋转顺序应用

  • 参数

    参数名 数据类型 说明
    Euler tuple(xAngle, yAngle, zAngle) 欧拉角
  • 返回值

    数据类型 说明
    Matrix 返回欧拉角对应的Matrix
  • 示例

from common.utils.mcmath import Matrix
data = (30, 65, 20)
newMatrix = Matrix.FromEulerXYZ(data)

# ToEulerXYZ

  • 描述

    返回矩阵对应的欧拉角

  • 参数

    参数名 数据类型 说明
    mat Matrix 旋转矩阵
  • 返回值

    数据类型 说明
    Euler tuple(xAngle, yAngle, zAngle)
  • 示例

from common.utils.mcmath import Matrix
data = [30, 65, 20]
newMatrix = Matrix.FromEulerXYZ(data)
newEular = Matrix.ToEulerXYZ(newMatrix)

# matrix4_multiply

  • 描述

    返回两个4*4矩阵相乘后结果

  • 参数

    参数名 数据类型 说明
    mat1 Matrix 左边矩阵,大小为4*4
    mat2 Matrix 右边矩阵,大小为4*4
  • 返回值

    数据类型 说明
    Matrix 结果,大小为4*4
  • 示例

from common.utils.mcmath import Matrix
q = Matrix.Create([[1,2,3,4], [3,4,5,6], [5,6,7,8], [7,8,9,10]])
p = Matrix.Create([[5,6,7,8], [7,8,9,10], [9,10,11,12], [11,12,13,14]])
newMatrix = Matrix.matrix4_multiply(q, p) # 与q*p效果相同,但是只能用于4*4矩阵,并且实现更底层,因此运算速度更快

# 成员方法

# Copy

  • 描述

    返回矩阵的拷贝

  • 返回值

    数据类型 说明
    Matrix 结果
  • 示例

from common.utils.mcmath import Matrix
q = Matrix.Create([[1,2], [3,4]])
print q.Copy()

# Eye

  • 描述

    把矩阵设置成单位矩阵,要求该矩阵行列数相同,否则报错

  • 示例

from common.utils.mcmath import Matrix
q = Matrix.Create([[1,2], [3,4]])
q.Eye() 
print q

# SetData

  • 描述

    根据数据源设置矩阵数据,要求数据源行列大于等于矩阵,否则报错

  • 参数

    参数名 数据类型 说明
    data list(list(int/float)) 数据源
  • 示例

from common.utils.mcmath import Matrix
q = Matrix.Create([[1,2], [3,4]])
q.SetData([[4,5], [6,7]])
print q

# Transpose

  • 描述

    返回转置矩阵

  • 返回值

    数据类型 说明
    Matrix 返回对应的转置矩阵
  • 示例

from common.utils.mcmath import Matrix
q = Matrix.Create([[1,2], [3,4]])
print q.Transpose()

# Inverse

  • 描述

    返回逆矩阵,矩阵必须是个方阵,否则函数报错

  • 返回值

    数据类型 说明
    Matrix 返回对应的逆矩阵
  • 示例

from common.utils.mcmath import Matrix
q = Matrix.Create([[1,2], [3,4]])
print q.Inverse()

# Decompose

  • 描述

    对矩阵进行位姿分解,分解成位移向量 * 旋转四元数 * 缩放向量。请注意,并非所有矩阵都可以位姿分解,若矩阵存在非线性变换,强行进行位姿分解会导致信息丢失

  • 返回值

    数据类型 说明
    tuple(float, float, float), tuple(float, float, float, float),tuple(float, float, float) 返回矩阵对应的位移向量 * 旋转四元数 * 缩放向量
  • 示例

from common.utils.mcmath import Matrix
q = Matrix.Create([[2,0,0,1], [0,3,0,1], [1,1,1,1], [1,1,1,1]])
print q.Decompose()

# ToQuaternion

  • 描述

    返回矩阵的旋转四元数

  • 返回值

    数据类型 说明
    tuple(float, float, float, float) 返回矩阵对应的旋转四元数
  • 示例

from common.utils.mcmath import Matrix
q = Matrix.Create([[2,0,0,1], [0,3,0,1], [1,1,1,1], [1,1,1,1]])
print q.ToQuaternion()

# 运算符

# operate +

  • 描述

    矩阵加法,两个矩阵相加表示向量的平移、多项式运算等,满足交换律、结合律,且要求两个矩阵行列数量相同

# operate *

  • 描述

    矩阵乘法,两个矩阵相乘表示线性映射、变换、多项式运算等,不满足交换律,但是满足结合律,且要求两个矩阵行列数量对应

# operate -

  • 描述

    矩阵减法,两个矩阵相加表示向量的平移、多项式运算等,满足交换律、结合律,且要求两个矩阵行列数量相同

# operate __str__

  • 描述

    用于输出矩阵的字符串形式,即print(matrix)

# operate row

  • 描述

    返回矩阵的行数

# operate col

  • 描述

    返回矩阵的列数

# operate [int, int]

  • 描述

    返回矩阵的x行,y列的值,即print mat[x,y]

# operate [int, int]=

  • 描述

    设置矩阵x行y列的值,即mat[x,y] = 1