mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
fix bug #362 and add missing specialization for affine-compact * projective
(transplanted from 48f0bbb586
)
This commit is contained in:
@@ -61,7 +61,7 @@ template< typename Lhs,
|
||||
typename Rhs,
|
||||
bool AnyProjective =
|
||||
transform_traits<Lhs>::IsProjective ||
|
||||
transform_traits<Lhs>::IsProjective>
|
||||
transform_traits<Rhs>::IsProjective>
|
||||
struct transform_transform_product_impl;
|
||||
|
||||
template< typename Other,
|
||||
@@ -1391,6 +1391,35 @@ struct transform_transform_product_impl<Transform<Scalar,Dim,LhsMode,LhsOptions>
|
||||
}
|
||||
};
|
||||
|
||||
template<typename Scalar, int Dim, int LhsOptions, int RhsOptions>
|
||||
struct transform_transform_product_impl<Transform<Scalar,Dim,AffineCompact,LhsOptions>,Transform<Scalar,Dim,Projective,RhsOptions>,true >
|
||||
{
|
||||
typedef Transform<Scalar,Dim,AffineCompact,LhsOptions> Lhs;
|
||||
typedef Transform<Scalar,Dim,Projective,RhsOptions> Rhs;
|
||||
typedef Transform<Scalar,Dim,Projective> ResultType;
|
||||
static ResultType run(const Lhs& lhs, const Rhs& rhs)
|
||||
{
|
||||
ResultType res;
|
||||
res.matrix().template topRows<Dim>() = lhs.matrix() * rhs.matrix();
|
||||
res.matrix().row(Dim) = rhs.matrix().row(Dim);
|
||||
return res;
|
||||
}
|
||||
};
|
||||
|
||||
template<typename Scalar, int Dim, int LhsOptions, int RhsOptions>
|
||||
struct transform_transform_product_impl<Transform<Scalar,Dim,Projective,LhsOptions>,Transform<Scalar,Dim,AffineCompact,RhsOptions>,true >
|
||||
{
|
||||
typedef Transform<Scalar,Dim,Projective,LhsOptions> Lhs;
|
||||
typedef Transform<Scalar,Dim,AffineCompact,RhsOptions> Rhs;
|
||||
typedef Transform<Scalar,Dim,Projective> ResultType;
|
||||
static ResultType run(const Lhs& lhs, const Rhs& rhs)
|
||||
{
|
||||
ResultType res(lhs.matrix().template leftCols<Dim>() * rhs.matrix());
|
||||
res.matrix().col(Dim) += lhs.matrix().col(Dim);
|
||||
return res;
|
||||
}
|
||||
};
|
||||
|
||||
} // end namespace internal
|
||||
|
||||
#endif // EIGEN_TRANSFORM_H
|
||||
|
||||
Reference in New Issue
Block a user