void Mat::mul(Mat& op) { if(DimenY != op.getDimenX()) { std::cerr<<DimenY<<" != "<<op.getDimenX(); std::cerr<<" Unmatched dimensions - MULTIPLY;"<<std::endl; return; } float** temp; temp = (float**)malloc(DimenX*sizeof(float*)); for(int x=0; x<DimenX; x++) temp[x] = (float*)malloc(op.getDimenY()*sizeof(float)); for(int x=0; x<DimenX; x++) { for(int y=0; y<op.getDimenY(); y++) { temp[x][y]=0.0; for(int k=0; k<DimenY; k++) { float t = matrix[x][k] * op.getElement(k,y); if( abs(t) > 1.0e-6 ) temp[x][y] = temp[x][y] + t; } } } free(matrix); matrix = temp; DimenY = op.getDimenY(); }
void Mat::add(Mat& op) { if(DimenX != op.getDimenX() || DimenY != op.getDimenY()) { std::cerr<<"("<<DimenX<<","<<DimenY<<") != ("<<op.getDimenX()<<","<<op.getDimenY()<<")"; std::cerr<<" Unmatched dimensions - ADD;"<<std::endl; return; } for(int x=0; x<DimenX; x++) for(int y=0; y<DimenY; y++) matrix[x][y] = matrix[x][y] + op.getElement(x,y); }
Vector3D toVector(Mat& m) { /* convert a 3 by 1 matrix(coloumn vector) to type Vector3D */ return Vector3D(m.getElement(0,0), m.getElement(1,0), m.getElement(2,0)); }