@@ -131,7 +131,7 @@ void EigenFactorPlaneDense::estimate_plane()
131
131
132
132
// Calcualte almost inverse of Q for later derivatives:
133
133
// option 1, full inverse: slightly inacurate solution.
134
- Q_inv_no_kernel_ = accumulatedQ_.inverse ();
134
+ // Q_inv_no_kernel_ = accumulatedQ_.inverse();
135
135
// std::cout << "Accumulated Q \n" << accumulatedQ_ <<std::endl;
136
136
// std::cout << "Direct Inverse\n" << Q_inv_no_kernel_ <<std::endl;
137
137
@@ -145,16 +145,17 @@ void EigenFactorPlaneDense::estimate_plane()
145
145
other_eigenvectors.col (0 ) *= 0.0 ;
146
146
// std::cout << "other eignevect \n" << other_eigenvectors <<std::endl;
147
147
other_eigenvectors_multiplied.col (0 ) = 0.0 * other_eigenvectors.col (0 );
148
- other_eigenvectors_multiplied.col (1 ) = 1.0 /(es.eigenvalues ()(1 ) - lambda_plane) * other_eigenvectors.col (1 );
149
- other_eigenvectors_multiplied.col (2 ) = 1.0 /(es.eigenvalues ()(2 ) - lambda_plane) * other_eigenvectors.col (2 );
148
+ // XXX: this should be the opposite, check!
149
+ other_eigenvectors_multiplied.col (1 ) = 1.0 /(lambda_plane - es.eigenvalues ()(1 )) * other_eigenvectors.col (1 );
150
+ other_eigenvectors_multiplied.col (2 ) = 1.0 /(lambda_plane - es.eigenvalues ()(2 )) * other_eigenvectors.col (2 );
150
151
// std::cout << "other eignevect mult \n" << other_eigenvectors_multiplied <<std::endl;
151
152
Q_inv_3x3 = other_eigenvectors * other_eigenvectors_multiplied.transpose ();
152
153
Q_inv_no_kernel_.topLeftCorner <3 ,3 >() = Q_inv_3x3;
153
154
// std::cout << "Q_inv_no_kernel_ centered =\n" << Q_inv_no_kernel_ <<std::endl;
154
155
Q_inv_no_kernel_ = Tcenter.transpose () *Q_inv_no_kernel_* Tcenter;
155
- // std::cout << "Q_inv_no_kernel_ =\n" << Q_inv_no_kernel_ <<std::endl;
156
+ // std::cout << "Q_inv from eigs + Tc =\n" << Q_inv_no_kernel_ <<std::endl;
156
157
157
- // Comparison (TO REMOVE)
158
+ // Comparison
158
159
// (Q - pi'*pi )-1
159
160
{
160
161
Eigen::SelfAdjointEigenSolver<Mat4> es4;
@@ -165,12 +166,13 @@ void EigenFactorPlaneDense::estimate_plane()
165
166
other_eigenvectors.col (0 ) *= 0.0 ;
166
167
// std::cout << "other eignevect \n" << other_eigenvectors <<std::endl;
167
168
other_eigenvectors_multiplied.col (0 ) = 0.0 * other_eigenvectors.col (0 );
168
- other_eigenvectors_multiplied.col (1 ) = 1.0 /(es4.eigenvalues ()(1 ) - lambda_plane ) * other_eigenvectors.col (1 );
169
- other_eigenvectors_multiplied.col (2 ) = 1.0 /(es4.eigenvalues ()(2 ) - lambda_plane ) * other_eigenvectors.col (2 );
170
- other_eigenvectors_multiplied.col (3 ) = 1.0 /(es4.eigenvalues ()(3 ) - lambda_plane ) * other_eigenvectors.col (3 );
169
+ other_eigenvectors_multiplied.col (1 ) = 1.0 /(lambda_plane - es4.eigenvalues ()(1 )) * other_eigenvectors.col (1 );
170
+ other_eigenvectors_multiplied.col (2 ) = 1.0 /(lambda_plane - es4.eigenvalues ()(2 )) * other_eigenvectors.col (2 );
171
+ other_eigenvectors_multiplied.col (3 ) = 1.0 /(lambda_plane - es4.eigenvalues ()(3 )) * other_eigenvectors.col (3 );
171
172
// std::cout << "other eignevect mult \n" << other_eigenvectors_multiplied <<std::endl;
172
173
// std::cout << "Q_inv_ 4x4 inverse =\n" << other_eigenvectors * other_eigenvectors_multiplied.transpose() <<std::endl;
173
- // Q_inv_no_kernel_ = other_eigenvectors * other_eigenvectors_multiplied.transpose();
174
+ Q_inv_no_kernel_ = other_eigenvectors * other_eigenvectors_multiplied.transpose ();
175
+ // std::cout << "Difference =\n" << (other_eigenvectors * other_eigenvectors_multiplied.transpose()-Q_inv_no_kernel_).squaredNorm() <<std::endl;
174
176
}
175
177
176
178
0 commit comments