diff options
author | Gael Guennebaud <g.gael@free.fr> | 2009-07-10 08:21:20 +0200 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2009-07-10 08:21:20 +0200 |
commit | 629e083d81a9203f4b2bc07a6cf0f8a61eef07c7 (patch) | |
tree | 5ea8552e8de879f8fb80ce5b52bbf5dc930d1d9e /Eigen/src | |
parent | f84bd3e7b1b669c9ad1469dbdd2929531db6645f (diff) |
slight change in the comparison to -1
Diffstat (limited to 'Eigen/src')
-rw-r--r-- | Eigen/src/Geometry/Quaternion.h | 6 | ||||
-rw-r--r-- | Eigen/src/SVD/SVD.h | 2 |
2 files changed, 3 insertions, 5 deletions
diff --git a/Eigen/src/Geometry/Quaternion.h b/Eigen/src/Geometry/Quaternion.h index 8d1bbf9d2..9385f259d 100644 --- a/Eigen/src/Geometry/Quaternion.h +++ b/Eigen/src/Geometry/Quaternion.h @@ -368,20 +368,18 @@ inline Quaternion<Scalar>& Quaternion<Scalar>::setFromTwoVectors(const MatrixBas // under the constraint: // ||x|| = 1 // which yields a singular value problem - if (ei_isApprox(c,Scalar(-1))) + if (c < Scalar(-1)+precision<Scalar>()) { c = std::max<Scalar>(c,-1); Matrix<Scalar,2,3> m; m << v0.transpose(), v1.transpose(); SVD<Matrix<Scalar,2,3> > svd(m); Vector3 axis = svd.matrixV().col(2); - + Scalar w2 = (Scalar(1)+c)*Scalar(0.5); this->w() = ei_sqrt(w2); this->vec() = axis * ei_sqrt(Scalar(1) - w2); - return *this; } - Vector3 axis = v0.cross(v1); Scalar s = ei_sqrt((Scalar(1)+c)*Scalar(2)); Scalar invs = Scalar(1)/s; diff --git a/Eigen/src/SVD/SVD.h b/Eigen/src/SVD/SVD.h index f27b7e66d..f9f9feb89 100644 --- a/Eigen/src/SVD/SVD.h +++ b/Eigen/src/SVD/SVD.h @@ -1,7 +1,7 @@ // This file is part of Eigen, a lightweight C++ template library // 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 // modify it under the terms of the GNU Lesser General Public |