slight change in the comparison to -1

This commit is contained in:
Gael Guennebaud 2009-07-10 08:21:20 +02:00
parent f84bd3e7b1
commit 629e083d81
2 changed files with 3 additions and 5 deletions

View File

@ -368,20 +368,18 @@ inline Quaternion<Scalar>& Quaternion<Scalar>::setFromTwoVectors(const MatrixBas
// under the constraint: // under the constraint:
// ||x|| = 1 // ||x|| = 1
// which yields a singular value problem // which yields a singular value problem
if (ei_isApprox(c,Scalar(-1))) if (c < Scalar(-1)+precision<Scalar>())
{ {
c = std::max<Scalar>(c,-1); c = std::max<Scalar>(c,-1);
Matrix<Scalar,2,3> m; m << v0.transpose(), v1.transpose(); Matrix<Scalar,2,3> m; m << v0.transpose(), v1.transpose();
SVD<Matrix<Scalar,2,3> > svd(m); SVD<Matrix<Scalar,2,3> > svd(m);
Vector3 axis = svd.matrixV().col(2); Vector3 axis = svd.matrixV().col(2);
Scalar w2 = (Scalar(1)+c)*Scalar(0.5); Scalar w2 = (Scalar(1)+c)*Scalar(0.5);
this->w() = ei_sqrt(w2); this->w() = ei_sqrt(w2);
this->vec() = axis * ei_sqrt(Scalar(1) - w2); this->vec() = axis * ei_sqrt(Scalar(1) - w2);
return *this; return *this;
} }
Vector3 axis = v0.cross(v1); Vector3 axis = v0.cross(v1);
Scalar s = ei_sqrt((Scalar(1)+c)*Scalar(2)); Scalar s = ei_sqrt((Scalar(1)+c)*Scalar(2));
Scalar invs = Scalar(1)/s; Scalar invs = Scalar(1)/s;

View File

@ -1,7 +1,7 @@
// This file is part of Eigen, a lightweight C++ template library // This file is part of Eigen, a lightweight C++ template library
// for linear algebra. // for linear algebra.
// //
// Copyright (C) 2008 Gael Guennebaud <g.gael@free.fr> // Copyright (C) 2008-2009 Gael Guennebaud <g.gael@free.fr>
// //
// Eigen is free software; you can redistribute it and/or // Eigen is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public // modify it under the terms of the GNU Lesser General Public