2#include <cgv/math/mat.h>
3#include <cgv/math/perm_mat.h>
4#include <cgv/math/diag_mat.h>
5#include <cgv/math/low_tri_mat.h>
6#include <cgv/math/up_tri_mat.h>
7#include <cgv/math/lu.h>
14T det(
const diag_mat<T>& m)
17 for(
unsigned i =0; i< m.nrows(); i++)
24T det(
const low_tri_mat<T>& m)
27 for(
unsigned i =0; i< m.nrows(); i++)
34T det(
const up_tri_mat<T>& m)
37 for(
unsigned i =0; i< m.nrows(); i++)
43inline int det(
const perm_mat& m)
47 unsigned num_transpositions = 0;
48 for(
unsigned i = 0; i < m.size();i++)
52 std::swap(temp(i),temp(temp(i)));
57 if(num_transpositions % 2 == 0)
68 assert(m.is_square());
73 return det(p)*det(l)*det(u);
78T det_22(
const T a11,
const T a12,
79 const T a21,
const T a22)
81 return a11*a22-a21*a12;
86T det_33(
const T a11,
const T a12,
const T a13,
87 const T a21,
const T a22,
const T a23,
88 const T a31,
const T a32,
const T a33)
91 return a11 * (a22 * a33 - a32 * a23) -
92 a21 * (a12 * a33 - a32 * a13) +
93 a31 * (a12 * a23 - a22 * a13);
98T det_44(
const T a11,
const T a12,
const T a13,
const T a14,
99 const T a21,
const T a22,
const T a23,
const T a24,
100 const T a31,
const T a32,
const T a33,
const T a34,
101 const T a41,
const T a42,
const T a43,
const T a44)
103 T a3344 = a33 * a44 - a43 * a34;
104 T a2344 = a23 * a44 - a43 * a24;
105 T a2334 = a23 * a34 - a33 * a24;
106 T a1344 = a13 * a44 - a43 * a14;
107 T a1334 = a13 * a34 - a33 * a14;
108 T a1324 = a13 * a24 - a23 * a14;
110 return a11 * (a22 * a3344 - a32 * a2344 + a42 * a2334) -
111 a21 * (a12 * a3344 - a32 * a1344 + a42 * a1334) +
112 a31 * (a12 * a2344 - a22 * a1344 + a42 * a1324) -
113 a41 * (a12 * a2334 - a22 * a1334 + a32 * a1324);