From 2600ba173168b6e9b32c713f2c217d322aab043e Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Sat, 10 Dec 2011 12:17:42 +0100 Subject: [PATCH] feature 297: s/intersectionPoint/pointAt, fix documentation, add a unit test --- Eigen/src/Geometry/ParametrizedLine.h | 18 +++++++----------- test/geo_parametrizedline.cpp | 11 +++++++++++ 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/Eigen/src/Geometry/ParametrizedLine.h b/Eigen/src/Geometry/ParametrizedLine.h index 4e4d52f9b..ddf6e7b8c 100644 --- a/Eigen/src/Geometry/ParametrizedLine.h +++ b/Eigen/src/Geometry/ParametrizedLine.h @@ -106,22 +106,17 @@ public: VectorType projection(const VectorType& p) const { return origin() + direction().dot(p-origin()) * direction(); } - /** \returns the point at parameter t along the line */ - VectorType intersectionPoint( Scalar t ) const; + VectorType pointAt( Scalar t ) const; - /** \returns parameter t of the intersection of the line with hyperplane */ template Scalar intersectionParameter(const Hyperplane<_Scalar, _AmbientDim, OtherOptions>& hyperplane) const; - /** \returns parameter t of the intersection of the line with hyperplane. (maintained for API compatablity) */ template Scalar intersection(const Hyperplane<_Scalar, _AmbientDim, OtherOptions>& hyperplane) const; - /** \returns the intersection point of the line with hyperplane */ template VectorType intersectionPoint(const Hyperplane<_Scalar, _AmbientDim, OtherOptions>& hyperplane) const; - /** \returns \c *this with scalar type casted to \a NewScalarType * * Note that if \a NewScalarType is equal to the current scalar type of \c *this @@ -168,16 +163,16 @@ inline ParametrizedLine<_Scalar, _AmbientDim,_Options>::ParametrizedLine(const H origin() = -hyperplane.normal()*hyperplane.offset(); } -/** \returns the point at t along this line +/** \returns the point at \a t along this line */ template inline typename ParametrizedLine<_Scalar, _AmbientDim,_Options>::VectorType -ParametrizedLine<_Scalar, _AmbientDim,_Options>::intersectionPoint( _Scalar t ) const +ParametrizedLine<_Scalar, _AmbientDim,_Options>::pointAt( _Scalar t ) const { return origin() + (direction()*t); } -/** \returns the parameter value of the intersection between \c *this and the given hyperplane +/** \returns the parameter value of the intersection between \c *this and the given \a hyperplane */ template template @@ -188,7 +183,8 @@ inline _Scalar ParametrizedLine<_Scalar, _AmbientDim,_Options>::intersectionPara } -/** \returns the parameter value of the intersection between \c *this and the given hyperplane +/** \deprecated use intersectionParameter() + * \returns the parameter value of the intersection between \c *this and the given \a hyperplane */ template template @@ -204,7 +200,7 @@ template inline typename ParametrizedLine<_Scalar, _AmbientDim,_Options>::VectorType ParametrizedLine<_Scalar, _AmbientDim,_Options>::intersectionPoint(const Hyperplane<_Scalar, _AmbientDim, OtherOptions>& hyperplane) const { - return intersectionPoint(intersectionParameter(hyperplane)); + return pointAt(intersectionParameter(hyperplane)); } #endif // EIGEN_PARAMETRIZEDLINE_H diff --git a/test/geo_parametrizedline.cpp b/test/geo_parametrizedline.cpp index 13f98fdd6..a289e70de 100644 --- a/test/geo_parametrizedline.cpp +++ b/test/geo_parametrizedline.cpp @@ -40,6 +40,7 @@ template void parametrizedline(const LineType& _line) typedef Matrix VectorType; typedef Matrix MatrixType; + typedef Hyperplane HyperplaneType; VectorType p0 = VectorType::Random(dim); VectorType p1 = VectorType::Random(dim); @@ -64,6 +65,16 @@ template void parametrizedline(const LineType& _line) VERIFY_IS_APPROX(hp1f.template cast(),l0); ParametrizedLine hp1d = l0.template cast(); VERIFY_IS_APPROX(hp1d.template cast(),l0); + + // intersections + VectorType p2 = VectorType::Random(dim); + VectorType n2 = VectorType::Random(dim).normalized(); + HyperplaneType hp(p2,n2); + Scalar t = l0.intersectionParameter(hp); + VectorType pi = l0.pointAt(t); + VERIFY_IS_MUCH_SMALLER_THAN(hp.signedDistance(pi), RealScalar(1)); + VERIFY_IS_MUCH_SMALLER_THAN(l0.distance(pi), RealScalar(1)); + VERIFY_IS_APPROX(l0.intersectionPoint(hp), pi); } template void parametrizedline_alignment()