您的位置:首页 > 其它

矩阵乘法运算test

2013-03-19 22:14 471 查看
//学习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;
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: