2 #ifndef vnl_adjugate_fixed_h_ 3 #define vnl_adjugate_fixed_h_ 17 #include <vnl/vnl_matrix_fixed.h> 18 #include <vnl/vnl_vector_fixed.h> 19 #include <vnl/vnl_matrix.h> 20 #include <vnl/vnl_det.h> 21 #include <vcl_cassert.h> 35 vnl_matrix_fixed<T,1,1>
vnl_adjugate(vnl_matrix_fixed<T,1,1>
const& m)
37 return vnl_matrix_fixed<T,1,1>(m(0,0));
52 vnl_matrix_fixed<T,2,2>
vnl_adjugate(vnl_matrix_fixed<T,2,2>
const& m)
55 d[0] = m(1,1); d[1] = - m(0,1);
56 d[3] = m(0,0); d[2] = - m(1,0);
57 return vnl_matrix_fixed<T,2,2>(d);
72 vnl_matrix_fixed<T,3,3>
vnl_adjugate(vnl_matrix_fixed<T,3,3>
const& m)
75 d[0] = (m(1,1)*m(2,2)-m(1,2)*m(2,1));
76 d[1] = (m(2,1)*m(0,2)-m(2,2)*m(0,1));
77 d[2] = (m(0,1)*m(1,2)-m(0,2)*m(1,1));
78 d[3] = (m(1,2)*m(2,0)-m(1,0)*m(2,2));
79 d[4] = (m(0,0)*m(2,2)-m(0,2)*m(2,0));
80 d[5] = (m(1,0)*m(0,2)-m(1,2)*m(0,0));
81 d[6] = (m(1,0)*m(2,1)-m(1,1)*m(2,0));
82 d[7] = (m(0,1)*m(2,0)-m(0,0)*m(2,1));
83 d[8] = (m(0,0)*m(1,1)-m(0,1)*m(1,0));
84 return vnl_matrix_fixed<T,3,3>(d);
99 vnl_matrix_fixed<T,4,4>
vnl_adjugate(vnl_matrix_fixed<T,4,4>
const& m)
102 d[0] = m(1,1)*m(2,2)*m(3,3) - m(1,1)*m(2,3)*m(3,2) - m(2,1)*m(1,2)*m(3,3)
103 + m(2,1)*m(1,3)*m(3,2) + m(3,1)*m(1,2)*m(2,3) - m(3,1)*m(1,3)*m(2,2);
104 d[1] = -m(0,1)*m(2,2)*m(3,3) + m(0,1)*m(2,3)*m(3,2) + m(2,1)*m(0,2)*m(3,3)
105 - m(2,1)*m(0,3)*m(3,2) - m(3,1)*m(0,2)*m(2,3) + m(3,1)*m(0,3)*m(2,2);
106 d[2] = m(0,1)*m(1,2)*m(3,3) - m(0,1)*m(1,3)*m(3,2) - m(1,1)*m(0,2)*m(3,3)
107 + m(1,1)*m(0,3)*m(3,2) + m(3,1)*m(0,2)*m(1,3) - m(3,1)*m(0,3)*m(1,2);
108 d[3] = -m(0,1)*m(1,2)*m(2,3) + m(0,1)*m(1,3)*m(2,2) + m(1,1)*m(0,2)*m(2,3)
109 - m(1,1)*m(0,3)*m(2,2) - m(2,1)*m(0,2)*m(1,3) + m(2,1)*m(0,3)*m(1,2);
110 d[4] = -m(1,0)*m(2,2)*m(3,3) + m(1,0)*m(2,3)*m(3,2) + m(2,0)*m(1,2)*m(3,3)
111 - m(2,0)*m(1,3)*m(3,2) - m(3,0)*m(1,2)*m(2,3) + m(3,0)*m(1,3)*m(2,2);
112 d[5] = m(0,0)*m(2,2)*m(3,3) - m(0,0)*m(2,3)*m(3,2) - m(2,0)*m(0,2)*m(3,3)
113 + m(2,0)*m(0,3)*m(3,2) + m(3,0)*m(0,2)*m(2,3) - m(3,0)*m(0,3)*m(2,2);
114 d[6] = -m(0,0)*m(1,2)*m(3,3) + m(0,0)*m(1,3)*m(3,2) + m(1,0)*m(0,2)*m(3,3)
115 - m(1,0)*m(0,3)*m(3,2) - m(3,0)*m(0,2)*m(1,3) + m(3,0)*m(0,3)*m(1,2);
116 d[7] = m(0,0)*m(1,2)*m(2,3) - m(0,0)*m(1,3)*m(2,2) - m(1,0)*m(0,2)*m(2,3)
117 + m(1,0)*m(0,3)*m(2,2) + m(2,0)*m(0,2)*m(1,3) - m(2,0)*m(0,3)*m(1,2);
118 d[8] = m(1,0)*m(2,1)*m(3,3) - m(1,0)*m(2,3)*m(3,1) - m(2,0)*m(1,1)*m(3,3)
119 + m(2,0)*m(1,3)*m(3,1) + m(3,0)*m(1,1)*m(2,3) - m(3,0)*m(1,3)*m(2,1);
120 d[9] = -m(0,0)*m(2,1)*m(3,3) + m(0,0)*m(2,3)*m(3,1) + m(2,0)*m(0,1)*m(3,3)
121 - m(2,0)*m(0,3)*m(3,1) - m(3,0)*m(0,1)*m(2,3) + m(3,0)*m(0,3)*m(2,1);
122 d[10]= m(0,0)*m(1,1)*m(3,3) - m(0,0)*m(1,3)*m(3,1) - m(1,0)*m(0,1)*m(3,3)
123 + m(1,0)*m(0,3)*m(3,1) + m(3,0)*m(0,1)*m(1,3) - m(3,0)*m(0,3)*m(1,1);
124 d[11]= -m(0,0)*m(1,1)*m(2,3) + m(0,0)*m(1,3)*m(2,1) + m(1,0)*m(0,1)*m(2,3)
125 - m(1,0)*m(0,3)*m(2,1) - m(2,0)*m(0,1)*m(1,3) + m(2,0)*m(0,3)*m(1,1);
126 d[12]= -m(1,0)*m(2,1)*m(3,2) + m(1,0)*m(2,2)*m(3,1) + m(2,0)*m(1,1)*m(3,2)
127 - m(2,0)*m(1,2)*m(3,1) - m(3,0)*m(1,1)*m(2,2) + m(3,0)*m(1,2)*m(2,1);
128 d[13]= m(0,0)*m(2,1)*m(3,2) - m(0,0)*m(2,2)*m(3,1) - m(2,0)*m(0,1)*m(3,2)
129 + m(2,0)*m(0,2)*m(3,1) + m(3,0)*m(0,1)*m(2,2) - m(3,0)*m(0,2)*m(2,1);
130 d[14]= -m(0,0)*m(1,1)*m(3,2) + m(0,0)*m(1,2)*m(3,1) + m(1,0)*m(0,1)*m(3,2)
131 - m(1,0)*m(0,2)*m(3,1) - m(3,0)*m(0,1)*m(1,2) + m(3,0)*m(0,2)*m(1,1);
132 d[15]= m(0,0)*m(1,1)*m(2,2) - m(0,0)*m(1,2)*m(2,1) - m(1,0)*m(0,1)*m(2,2)
133 + m(1,0)*m(0,2)*m(2,1) + m(2,0)*m(0,1)*m(1,2) - m(2,0)*m(0,2)*m(1,1);
134 return vnl_matrix_fixed<T,4,4>(d);
151 assert(m.rows() == m.columns());
152 assert(m.rows() <= 4);
154 return vnl_matrix<T>(1,1, T(1)/m(0,0));
155 else if (m.rows() == 2)
156 return vnl_adjugate(vnl_matrix_fixed<T,2,2>(m)).as_ref();
157 else if (m.rows() == 3)
158 return vnl_adjugate(vnl_matrix_fixed<T,3,3>(m)).as_ref();
160 return vnl_adjugate(vnl_matrix_fixed<T,4,4>(m)).as_ref();
179 return vnl_matrix_fixed<T,1,1>(T(1)/m(0,0));
200 d[0] = m(1,1); d[2] = - m(0,1);
201 d[3] = m(0,0); d[1] = - m(1,0);
202 return vnl_matrix_fixed<T,2,2>(d);
223 d[0] = (m(1,1)*m(2,2)-m(1,2)*m(2,1));
224 d[3] = (m(2,1)*m(0,2)-m(2,2)*m(0,1));
225 d[6] = (m(0,1)*m(1,2)-m(0,2)*m(1,1));
226 d[1] = (m(1,2)*m(2,0)-m(1,0)*m(2,2));
227 d[4] = (m(0,0)*m(2,2)-m(0,2)*m(2,0));
228 d[7] = (m(1,0)*m(0,2)-m(1,2)*m(0,0));
229 d[2] = (m(1,0)*m(2,1)-m(1,1)*m(2,0));
230 d[5] = (m(0,1)*m(2,0)-m(0,0)*m(2,1));
231 d[8] = (m(0,0)*m(1,1)-m(0,1)*m(1,0));
232 return vnl_matrix_fixed<T,3,3>(d);
252 d[0] = m(1,1)*m(2,2)*m(3,3) - m(1,1)*m(2,3)*m(3,2) - m(2,1)*m(1,2)*m(3,3)
253 + m(2,1)*m(1,3)*m(3,2) + m(3,1)*m(1,2)*m(2,3) - m(3,1)*m(1,3)*m(2,2);
254 d[4] = -m(0,1)*m(2,2)*m(3,3) + m(0,1)*m(2,3)*m(3,2) + m(2,1)*m(0,2)*m(3,3)
255 - m(2,1)*m(0,3)*m(3,2) - m(3,1)*m(0,2)*m(2,3) + m(3,1)*m(0,3)*m(2,2);
256 d[8] = m(0,1)*m(1,2)*m(3,3) - m(0,1)*m(1,3)*m(3,2) - m(1,1)*m(0,2)*m(3,3)
257 + m(1,1)*m(0,3)*m(3,2) + m(3,1)*m(0,2)*m(1,3) - m(3,1)*m(0,3)*m(1,2);
258 d[12]= -m(0,1)*m(1,2)*m(2,3) + m(0,1)*m(1,3)*m(2,2) + m(1,1)*m(0,2)*m(2,3)
259 - m(1,1)*m(0,3)*m(2,2) - m(2,1)*m(0,2)*m(1,3) + m(2,1)*m(0,3)*m(1,2);
260 d[1] = -m(1,0)*m(2,2)*m(3,3) + m(1,0)*m(2,3)*m(3,2) + m(2,0)*m(1,2)*m(3,3)
261 - m(2,0)*m(1,3)*m(3,2) - m(3,0)*m(1,2)*m(2,3) + m(3,0)*m(1,3)*m(2,2);
262 d[5] = m(0,0)*m(2,2)*m(3,3) - m(0,0)*m(2,3)*m(3,2) - m(2,0)*m(0,2)*m(3,3)
263 + m(2,0)*m(0,3)*m(3,2) + m(3,0)*m(0,2)*m(2,3) - m(3,0)*m(0,3)*m(2,2);
264 d[9] = -m(0,0)*m(1,2)*m(3,3) + m(0,0)*m(1,3)*m(3,2) + m(1,0)*m(0,2)*m(3,3)
265 - m(1,0)*m(0,3)*m(3,2) - m(3,0)*m(0,2)*m(1,3) + m(3,0)*m(0,3)*m(1,2);
266 d[13]= m(0,0)*m(1,2)*m(2,3) - m(0,0)*m(1,3)*m(2,2) - m(1,0)*m(0,2)*m(2,3)
267 + m(1,0)*m(0,3)*m(2,2) + m(2,0)*m(0,2)*m(1,3) - m(2,0)*m(0,3)*m(1,2);
268 d[2] = m(1,0)*m(2,1)*m(3,3) - m(1,0)*m(2,3)*m(3,1) - m(2,0)*m(1,1)*m(3,3)
269 + m(2,0)*m(1,3)*m(3,1) + m(3,0)*m(1,1)*m(2,3) - m(3,0)*m(1,3)*m(2,1);
270 d[6] = -m(0,0)*m(2,1)*m(3,3) + m(0,0)*m(2,3)*m(3,1) + m(2,0)*m(0,1)*m(3,3)
271 - m(2,0)*m(0,3)*m(3,1) - m(3,0)*m(0,1)*m(2,3) + m(3,0)*m(0,3)*m(2,1);
272 d[10]= m(0,0)*m(1,1)*m(3,3) - m(0,0)*m(1,3)*m(3,1) - m(1,0)*m(0,1)*m(3,3)
273 + m(1,0)*m(0,3)*m(3,1) + m(3,0)*m(0,1)*m(1,3) - m(3,0)*m(0,3)*m(1,1);
274 d[14]= -m(0,0)*m(1,1)*m(2,3) + m(0,0)*m(1,3)*m(2,1) + m(1,0)*m(0,1)*m(2,3)
275 - m(1,0)*m(0,3)*m(2,1) - m(2,0)*m(0,1)*m(1,3) + m(2,0)*m(0,3)*m(1,1);
276 d[3] = -m(1,0)*m(2,1)*m(3,2) + m(1,0)*m(2,2)*m(3,1) + m(2,0)*m(1,1)*m(3,2)
277 - m(2,0)*m(1,2)*m(3,1) - m(3,0)*m(1,1)*m(2,2) + m(3,0)*m(1,2)*m(2,1);
278 d[7] = m(0,0)*m(2,1)*m(3,2) - m(0,0)*m(2,2)*m(3,1) - m(2,0)*m(0,1)*m(3,2)
279 + m(2,0)*m(0,2)*m(3,1) + m(3,0)*m(0,1)*m(2,2) - m(3,0)*m(0,2)*m(2,1);
280 d[11]= -m(0,0)*m(1,1)*m(3,2) + m(0,0)*m(1,2)*m(3,1) + m(1,0)*m(0,1)*m(3,2)
281 - m(1,0)*m(0,2)*m(3,1) - m(3,0)*m(0,1)*m(1,2) + m(3,0)*m(0,2)*m(1,1);
282 d[15]= m(0,0)*m(1,1)*m(2,2) - m(0,0)*m(1,2)*m(2,1) - m(1,0)*m(0,1)*m(2,2)
283 + m(1,0)*m(0,2)*m(2,1) + m(2,0)*m(0,1)*m(1,2) - m(2,0)*m(0,2)*m(1,1);
284 return vnl_matrix_fixed<T,4,4>(d);
303 assert(m.rows() == m.columns());
304 assert(m.rows() <= 4);
306 return vnl_matrix<T>(1,1, T(1)/m(0,0));
307 else if (m.rows() == 2)
308 return vnl_cofactor(vnl_matrix_fixed<T,2,2>(m)).as_ref();
309 else if (m.rows() == 3)
310 return vnl_cofactor(vnl_matrix_fixed<T,3,3>(m)).as_ref();
312 return vnl_cofactor(vnl_matrix_fixed<T,4,4>(m)).as_ref();
317 vnl_vector_fixed<T,3>
vnl_cofactor_row1(vnl_vector_fixed<T,3>
const& row2, vnl_vector_fixed<T,3>
const& row3)
320 d[0] = (row2[1]*row3[2]-row2[2]*row3[1]);
321 d[1] = (row2[2]*row3[0]-row2[0]*row3[2]);
322 d[2] = (row2[0]*row3[1]-row2[1]*row3[0]);
323 return vnl_vector_fixed<T,3>(d);
326 #endif // vnl_adjugate_fixed_h_ vnl_vector_fixed< T, 3 > vnl_cofactor_row1(vnl_vector_fixed< T, 3 > const &row2, vnl_vector_fixed< T, 3 > const &row3)
vnl_matrix_fixed< T, 1, 1 > vnl_adjugate(vnl_matrix_fixed< T, 1, 1 > const &m)
vnl_matrix< T > vnl_adjugate_asfixed(vnl_matrix< T > const &m)
vnl_matrix_fixed< T, 1, 1 > vnl_cofactor(vnl_matrix_fixed< T, 1, 1 > const &m)