⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmatrix.h

📁 相对定向的坐标解算
💻 H
📖 第 1 页 / 共 2 页
字号:
// 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 + -