📄 cmatrix.h
字号:
// Matrix.h: interface for the CMatrix class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(__MATRIX_H__)
#define __MATRIX_H__
typedef unsigned char uint1; //标识用u1,数值运算
typedef unsigned short uint2; //标识用u2,数值运算
typedef unsigned long uint4; //标识用u4,数值运算
typedef char int1; //标识用i1,数值运算
typedef short int2; //标识用i2,数值运算
typedef int int4; //标识用i4,数值运算
typedef float f4; //标识用f4,数值运算
typedef double f8; //标识用f8,数值运算
//typedef char BOOL //标识用b, 逻辑运算(由于WINDOWS操作系统在afx.h中有此定义,所以此处不需)
/*
固定长度字符串用int1[],标识用str
不定长度字符串:WINDOWS环境中使用CString,其他环境中使用int1*,标识均为str
*/
///////////////////////////////////////////
//标准常量
#undef FALSE
#define FALSE 0
#undef TRUE
#define TRUE 1
#undef NULL
#define NULL 0
///////////////////////////////////////////
//数学常量及变换
#define PI (3.141592653589793)
#define DEG2SEMI (1.0/180.0) //degees to semisircles
#define SEMI2RAD (PI) //semisircles to radians
#define DEG2RAD (PI/180.0) //degrees to radians
#define SEC2RAD (PI/180.0/3600.0) //seconds to radians
#define RAD2DEG (180.0/PI) //radians to degrees
#define RAD2SEC (3600.0*180.0/PI) //radians to seconds
#define EPSILON (1e-10) //minimax float value can be ignored
class CMatrix
{
public:
CMatrix();
//复制构造
CMatrix(const CMatrix& OriginalMatrix);
//构造元素为零的矩阵
CMatrix(int4 i4RowNumber, int4 i4ColumnNumber);
//构造输入元素的矩阵
CMatrix(const f8* pData, int4 i4RowNumber, int4 i4ColumnNumber);
virtual ~CMatrix();
//operation
public:
//功能:初始化矩阵
//参数:pData:原始数据首地址
// i4RowNumber:矩阵行数
// i4ColumnNumber:矩阵列数
//返回:成功返回1,失败返回0,参数错误返回-100
int4 InitMatrix(const f8* pData,int4 i4RowNumber, int4 i4ColumnNumber);
//功能:初始化空矩阵,开辟存储空间
//返回:成功返回1,失败返回0,参数错误返回-100
int4 InitEmptyMatrix(int4 i4RowNumber, int4 i4ColumnNumber);
//功能:初始化零矩阵
//返回:成功返回1,失败返回0,参数错误返回-100
int4 InitZeroMatrix(int4 i4RowNumber,int4 i4ColumnNumber);
//功能:得到原有矩阵的逆矩阵,原矩阵不变,效率高
//参数:maInverse :结果矩阵
//返回:成功 1 失败 0
int4 GetInverseMatrix(CMatrix& maInverse)const;
//功能:得到原有矩阵的逆矩阵,原矩阵不变
//返回:成功返回一个有效CMatrix对象,失败返回空矩阵
CMatrix GetInverseMatrix()const;
//功能:原有矩阵求逆
//返回:成功 1 失败 0
int4 Inverse();
//功能:得到原有矩阵的转置矩阵,原矩阵不变
//参数:maTransposed :结果矩阵
//返回:成功 1 失败 0
int4 GetTransposedMatrix(CMatrix& maTransposed)const;
//功能:得到原有矩阵的转置矩阵,原矩阵不变
//返回:成功返回一个有效CMatrix对象,失败返回空矩阵
CMatrix GetTransposedMatrix()const;
//功能:原有矩阵转置
//返回:成功 1 失败 0
int4 Transpose();
//功能:得到原有矩阵的四舍五入整数矩阵,原矩阵不变
//返回:成功 1 失败 0
int4 GetRoundMatrix(CMatrix& maTransposed)const;
//功能:得到原有矩阵的四舍五入整数矩阵,原矩阵不变
//返回:成功返回一个有效CMatrix对象,失败返回空矩阵
CMatrix GetRoundMatrix()const;
//功能:原有矩阵四舍五入,变成整数矩阵
//返回:成功 1 失败 0
int4 Round();
//功能:得到原有矩阵的左上角子矩阵,原矩阵不变
//参数:
// nSubRowNumber: 新矩阵的行数
// nSubColumnNumber: 新矩阵的列数
// maSubMatrix: 结果矩阵
//返回:成功返回一个有效CMatrix对象,失败返回空矩阵
int4 GetLeftTopSubMatrix(int4 i4SubRowNumber, int4 i4SubColumnNumber, CMatrix& maSubMatrix)const;
//功能:得到原有矩阵的左上角子矩阵,原矩阵不变
//参数:
// nSubRowNumber: 新矩阵的行数
// nSubColumnNumber: 新矩阵的列数
//返回:成功返回一个有效CMatrix对象,失败返回空矩阵
CMatrix GetLeftTopSubMatrix(int4 i4SubRowNumber,int4 i4SubColumnNumber)const;
//功能:得到原有矩阵的任意位置子阵,原矩阵不变
//参数:
// nBeginRowNo: 子阵在原有矩阵中的起始行号,从0起算
// nSubRowNumber: 新矩阵的行数
// nBeginColumnNo: 子阵在原有矩阵中的起始列号,从0起算
// nSubColumnNumber: 新矩阵的列数
// maSubMatrix 结果矩阵
//返回:1 成功;0 失败
int4 GetSubMatrix(int4 i4BeginRowNo, int4 i4SubRowNumber, int4 i4BeginColumnNo, int4 i4SubColumnNumber, CMatrix& maSubMatrix)const;
//功能:得到原有矩阵的任意位置子阵,原矩阵不变
//参数:
// nBeginRowNo: 子阵在原有矩阵中的起始行号,从0起算
// nSubRowNumber: 新矩阵的行数
// nBeginColumnNo: 子阵在原有矩阵中的起始列号,从0起算
// nSubColumnNumber: 新矩阵的列数
//返回:成功返回一个有效CMatrix对象,失败返回空矩阵
CMatrix GetSubMatrix(int4 i4BeginRowNo, int4 i4SubRowNumber, int4 i4BeginColumnNo, int4 i4SubColumnNumber)const;
//功能:矩阵相加运算
//参数:maRight 被加数
// maResult 相加后的结果矩阵
//返回:1 成功;0 失败
//使用示例:A.AddMatrix(B,C) 意为: C中的元素为A、B中元素之和
int4 AddMatrix(CMatrix& maRight, CMatrix& maResult)const;
//功能:矩阵相减运算
//参数:maRight 被减数
// maResult 相减后的结果矩阵
//返回:1 成功;0 失败
//使用示例:A.SubMatrix(B,C) 意为: C中的元素为A、B中元素之差
int4 SubMatrix(CMatrix& maRight, CMatrix& maResult)const;
//功能:矩阵相乘运算
//参数:maRight 被乘数
// maResult 相乘后的结果矩阵
//返回:1 成功;0 失败
//使用示例:A.MultiplyMatrix(B,C) 意为: C中的元素为A、B中元素之积
int4 MultiplyMatrix(CMatrix& maRight, CMatrix& maResult)const;
//功能:更改矩阵中的某子块矩阵元素, 基于ChangeMember函数
//参数:
// i4BeginRowNo 元素所在矩阵中的行数,从0起算
// i4BeginColumnNo 元素所在矩阵中的列数,从0起算
// maSecMatrix 元素改为的值
//返回:1 成功;0 失败
int4 ChangeSubMatrix(int4 i4BeginRowNo, int4 i4BeginColumnNo, const CMatrix& maSecMatrix);
//增加矩阵中的某子块矩阵元素
//参数:
// i4BeginRowNo 元素所在矩阵中的行数,从0起算
// i4BeginColumnNo 元素所在矩阵中的列数,从0起算
// maSecMatrix 元素改为的值
//返回:1 成功;0 失败
int4 AddSubMatrixMember(int4 i4BeginRowNo, int4 i4BeginColumnNo, const CMatrix& maSecMatrix);
//功能:以某一个数值,更改矩阵中的某行元素
//参数:
// i4RowNo 要修改的行数,从0起算
// f8Member 行元素改为的值
//返回:1 成功;0 失败
int4 ChangeOneRowWithMember(int4 i4RowNo, f8 f8Member);
//功能:以某一个数值,更改矩阵中的某列元素
//参数:
// i4ColumnNo 要修改的列数,从0起算
// f8Member 列元素改为的值
//返回:1 成功;0 失败
int4 ChangeOneColumnWithMember(int4 i4ColumnNo, f8 f8Member);
//功能:获取矩阵中的某个元素
//参数:
// i4RowNo 元素所在矩阵中的行数,从0起算
// i4ColumnNo 元素所在矩阵中的列数,从0起算
// f8Member : 有效的f8地址
//返回:1 成功;0 失败
int4 GetMember(int4 i4RowNo, int4 i4ColumnNo, f8& f8Member)const;
//功能:更改矩阵中的某个元素
//参数:
// i4RowNo 元素所在矩阵中的行数,从0起算
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -