Revision 322c0d59
| utility/matrix.h | ||
|---|---|---|
| 192 | 192 | 
    return ret;  | 
| 193 | 193 | 
    }  | 
| 194 | 194 | 
     | 
| 195 | 
    double determinant()  | 
|
| 195 | 
        double determinant() const
   | 
|
| 196 | 196 | 
        {
   | 
| 197 | 197 | 
    if(N == 1)  | 
| 198 | 198 | 
    return cell(0, 0);  | 
| ... | ... | |
| 206 | 206 | 
    return det;  | 
| 207 | 207 | 
    }  | 
| 208 | 208 | 
     | 
| 209 | 
    Matrix invert()  | 
|
| 209 | 
        Matrix invert() const
   | 
|
| 210 | 210 | 
        {
   | 
| 211 | 211 | 
    Matrix ret;  | 
| 212 | 212 | 
    float det = determinant();  | 
| 213 | 213 | 
     | 
| 214 | 
            for(int x = 0; x < N; x++)
   | 
|
| 214 | 
            for (int i = 0; i < N; i++)
   | 
|
| 215 | 215 | 
            {
   | 
| 216 | 
                for(int y = 0; y < N; y++)
   | 
|
| 216 | 
                for (int j = 0; j < N; j++)
   | 
|
| 217 | 217 | 
                {
   | 
| 218 | 
    Matrix<N-1> minor = minor_matrix(y, x);  | 
|
| 219 | 
    ret(x, y) = det*minor.determinant();  | 
|
| 220 | 
    if( (x+y)%2 == 1)  | 
|
| 221 | 
    ret(x, y) = -ret(x, y);  | 
|
| 218 | 
    ret(i, j) = minor_matrix(j, i).determinant() / det;  | 
|
| 219 | 
    if ((i+j)%2 == 1)  | 
|
| 220 | 
    ret(i, j) = -ret(i, j);  | 
|
| 222 | 221 | 
    }  | 
| 223 | 222 | 
    }  | 
| 224 | 223 | 
    return ret;  | 
Also available in: Unified diff