矩阵乘法运算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; }
我相信,会有一个公正而深刻的认识来为我们总结的:那时,我们这一代独有的奋斗、思索、烙印和选择才会显露其意义。 ——《北方的河》