矩阵乘法运算test

//学习CG,刚好想到自己动手实现下矩阵变换吧
//just test and test
#include "gl/glut.h"
#include <iostream>
#include <cmath>
using namespace std;

#define MAX 3
class Matrix
{
public:
	int row;
	int col;
	double num[MAX][MAX];
	Matrix()
	{
		for(int i=0;i<MAX;i++)
			for(int j=0;j<MAX;j++)
				num[i][j]=0;
		row=MAX;
		col=MAX;
	}
};
// A * B
Matrix MultiMatrix(Matrix &A, Matrix &B)
{
	Matrix result;
	result.row = A.row;
	result.col = B.col;
	for(int i=0;i<result.row;i++)	
		for(int j=0;j<result.col;j++)
			for(int k=0;k<A.col;k++)
				result.num[i][j] += A.num[i][k] * B.num[k][j];
	
	return result;
}
//缩放变换
Matrix scale(Matrix &A,double x,double y)
{
	Matrix s;
	s.num[0][0]=x;
	s.num[1][1]=y;
	s.num[2][2]=1;
	return MultiMatrix(s,A);
}
//逆时针旋转变换
Matrix rotate(Matrix &A,double angle)
{
	Matrix r;
	r.num[0][0]= cos(angle);
	r.num[0][1]= -sin(angle);
	r.num[1][0]= sin(angle);
	r.num[1][1]= cos(angle);
	r.num[2][2]= 1;
	return MultiMatrix(r,A);
}
//平移变换
Matrix translation(Matrix &A,double x,double y)
{
	Matrix t;
	t.num[0][0]=1;
	t.num[1][1]=1;
	t.num[2][0]=-x;
	t.num[2][1]=-y;
	t.num[2][2]=1;
	return MultiMatrix(t,A);
}


int main(int argc,char *argv[])
{
	//glutInit(&argc,argv);
	//glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);

	
	//TEST FOR MATRIX
	// A:3*2    b:2*3
	Matrix A,B;
	A.row=3;
	A.col=2;
	B.row=2;
	B.col=3;
	for(int i=0;i<3;i++)
		for(int j=0;j<2;j++)
			cin>>A.num[i][j];
	for(int i=0;i<2;i++)
		for(int j=0;j<3;j++)
			cin>>B.num[i][j];
	Matrix C = MultiMatrix(A,B);
	for(int i=0;i<C.row;i++)
	{
		for(int j=0;j<C.col;j++)
			cout<<C.num[i][j]<<" ";
		cout<<endl;
	}
	char a;
	cin>>a;
	return 0;
}

  

原文地址:https://www.cnblogs.com/liaopr/p/2970120.html