33 Eigen::Matrix<T, 2, 2> a;
34 a << A[0], A[1], A[2], A[3];
35 Eigen::SelfAdjointEigenSolver<Eigen::Matrix<T, 2, 2>> es(a);
36 if (es.info() != Eigen::Success) {
40 Eigen::Matrix<T, 2, 1> D = es.eigenvalues();
41 Eigen::Matrix<T, 2, 2> V = es.eigenvectors();
42 if (fabs(D(0, 0)) < fabs(D(1, 0))) {
43 std::swap(D(0, 0), D(1, 0));
44 std::swap(V(0, 0), V(0, 1));
45 std::swap(V(1, 0), V(1, 1));
60 Eigen::Matrix<T, 3, 3> a;
61 a << A[0], A[1], A[2], A[3], A[4], A[5], A[6], A[7], A[8];
62 Eigen::SelfAdjointEigenSolver<Eigen::Matrix<T, 3, 3>> es(a);
63 if (es.info() != Eigen::Success) {
66 Eigen::Matrix<T, 3, 1> D = es.eigenvalues();
67 Eigen::Matrix<T, 3, 3> V = es.eigenvectors();
68 if (fabs(D(1, 0)) < fabs(D(2, 0))) {
69 std::swap(D(1, 0), D(2, 0));
70 for (
int i = 0; i < 3; ++i) {
71 std::swap(V(i, 1), V(i, 2));
74 if (fabs(D(0, 0)) < fabs(D(1, 0))) {
75 std::swap(D(0, 0), D(1, 0));
76 for (
int i = 0; i < 3; ++i) {
77 std::swap(V(i, 0), V(i, 1));
80 if (fabs(D(1, 0)) < fabs(D(2, 0))) {
81 std::swap(D(1, 0), D(2, 0));
82 for (
int i = 0; i < 3; ++i) {
83 std::swap(V(i, 1), V(i, 2));
174 const T *t, T depth, T *X) {
176 T u = (x[0] - K[2]) *
IRec(K[0]);
177 T v = (x[1] - K[5]) *
IRec(K[4]);
179 T ru = R[0] * u + R[3] * v + R[6];
180 T rv = R[1] * u + R[4] * v + R[7];
181 T rw = R[2] * u + R[5] * v + R[8];
183 T tu = R[0] * t[0] + R[3] * t[1] + R[6] * t[2];
184 T tv = R[1] * t[0] + R[4] * t[1] + R[7] * t[2];
185 T tw = R[2] * t[0] + R[5] * t[1] + R[8] * t[2];
186 T w =
IDiv(depth + tw, rw);