10 #ifndef EIGEN_HOMOGENEOUS_H 11 #define EIGEN_HOMOGENEOUS_H 32 template<
typename MatrixType,
int Direction>
40 RowsPlusOne = (MatrixType::RowsAtCompileTime !=
Dynamic) ?
41 int(MatrixType::RowsAtCompileTime) + 1 :
Dynamic,
42 ColsPlusOne = (MatrixType::ColsAtCompileTime !=
Dynamic) ?
43 int(MatrixType::ColsAtCompileTime) + 1 :
Dynamic,
44 RowsAtCompileTime = Direction==
Vertical ? RowsPlusOne : MatrixType::RowsAtCompileTime,
45 ColsAtCompileTime = Direction==
Horizontal ? ColsPlusOne : MatrixType::ColsAtCompileTime,
46 MaxRowsAtCompileTime = RowsAtCompileTime,
47 MaxColsAtCompileTime = ColsAtCompileTime,
60 template<
typename MatrixType,
int _Direction>
class Homogeneous 66 enum { Direction = _Direction };
82 template<
typename Rhs>
90 template<
typename Lhs>
friend 98 template<
typename Scalar,
int Dim,
int Mode,
int Options>
friend 103 return Product<Transform<Scalar,Dim,Mode,Options>,
Homogeneous>(lhs,rhs);
106 template<
typename Func>
130 template<
typename Derived>
148 template<
typename ExpressionType,
int Direction>
172 template<
typename Derived>
178 ColsAtCompileTime==1?
size()-1:1,
179 ColsAtCompileTime==1?1:
size()-1) / coeff(
size()-1);
196 template<
typename ExpressionType,
int Direction>
204 Direction==
Vertical ? HNormalized_SizeMinusOne : 1,
205 Direction==
Horizontal ? HNormalized_SizeMinusOne : 1>
217 template<
typename MatrixOrTransformType>
220 typedef MatrixOrTransformType
type;
224 template<
typename Scalar,
int Dim,
int Mode,
int Options>
232 template<
typename Scalar,
int Dim,
int Options>
240 template<
typename MatrixType,
typename Lhs>
248 LhsMatrixTypeCleaned::RowsAtCompileTime,
249 MatrixTypeCleaned::ColsAtCompileTime,
250 MatrixTypeCleaned::PlainObject::Options,
251 LhsMatrixTypeCleaned::MaxRowsAtCompileTime,
255 template<
typename MatrixType,
typename Lhs>
257 :
public ReturnByValue<homogeneous_left_product_impl<Homogeneous<MatrixType,Vertical>,Lhs> >
275 dst =
Block<
const LhsMatrixTypeNested,
276 LhsMatrixTypeNested::RowsAtCompileTime,
277 LhsMatrixTypeNested::ColsAtCompileTime==
Dynamic?
Dynamic:LhsMatrixTypeNested::ColsAtCompileTime-1>
278 (m_lhs,0,0,m_lhs.rows(),m_lhs.cols()-1) * m_rhs;
279 dst += m_lhs.col(m_lhs.cols()-1).rowwise()
280 .template replicate<MatrixType::ColsAtCompileTime>(m_rhs.cols());
283 typename LhsMatrixTypeCleaned::Nested
m_lhs;
287 template<
typename MatrixType,
typename Rhs>
291 MatrixType::RowsAtCompileTime,
292 Rhs::ColsAtCompileTime,
293 MatrixType::PlainObject::Options,
294 MatrixType::MaxRowsAtCompileTime,
298 template<
typename MatrixType,
typename Rhs>
300 :
public ReturnByValue<homogeneous_right_product_impl<Homogeneous<MatrixType,Horizontal>,Rhs> >
304 : m_lhs(lhs), m_rhs(rhs)
313 dst = m_lhs *
Block<
const RhsNested,
314 RhsNested::RowsAtCompileTime==
Dynamic?
Dynamic:RhsNested::RowsAtCompileTime-1,
315 RhsNested::ColsAtCompileTime>
316 (m_rhs,0,0,m_rhs.rows()-1,m_rhs.cols());
317 dst += m_rhs.row(m_rhs.rows()-1).colwise()
318 .template replicate<MatrixType::RowsAtCompileTime>(m_lhs.rows());
325 template<
typename ArgType,
int Direction>
335 template<
typename ArgType,
int Direction>
337 :
evaluator<typename Homogeneous<ArgType,Direction>::PlainObject >
346 ::new (static_cast<Base*>(
this)) Base(m_temp);
354 template<
typename DstXprType,
typename ArgType,
typename Scalar>
362 if((dst.rows()!=dstRows) || (dst.cols()!=dstCols))
363 dst.resize(dstRows, dstCols);
366 dst.row(dst.rows()-1).
setOnes();
371 template<
typename DstXprType,
typename ArgType,
typename Scalar>
379 if((dst.rows()!=dstRows) || (dst.cols()!=dstCols))
380 dst.resize(dstRows, dstCols);
383 dst.col(dst.cols()-1).
setOnes();
387 template<
typename LhsArg,
typename Rhs,
int ProductTag>
390 template<
typename Dest>
397 template<
typename Lhs,
typename Rhs>
401 Dim = Lhs::ColsAtCompileTime,
402 Rows = Lhs::RowsAtCompileTime
412 template<
typename Lhs,
typename Rhs,
int ProductTag>
414 :
public evaluator<typename homogeneous_right_product_refactoring_helper<typename Lhs::NestedExpression,Rhs>::Xpr>
423 : Base( xpr.lhs().nestedExpression() .lazyProduct( xpr.rhs().template
topRows<helper::Dim>(xpr.lhs().nestedExpression().
cols()) )
424 + ConstantBlock(xpr.rhs().
row(xpr.rhs().
rows()-1),xpr.lhs().
rows(), 1) )
428 template<
typename Lhs,
typename RhsArg,
int ProductTag>
431 template<
typename Dest>
440 template<
typename Lhs,
typename RhsArg,
int ProductTag>
443 template<
typename Dest>
446 dst.noalias() = lhs * rhs.
eval();
450 template<
typename Lhs,
typename Rhs>
454 Dim = Rhs::RowsAtCompileTime,
465 template<
typename Lhs,
typename Rhs,
int ProductTag>
467 :
public evaluator<typename homogeneous_left_product_refactoring_helper<Lhs,typename Rhs::NestedExpression>::Xpr>
476 : Base( xpr.lhs().template
leftCols<helper::Dim>(xpr.rhs().nestedExpression().
rows()) .lazyProduct( xpr.rhs().nestedExpression() )
477 + ConstantBlock(xpr.lhs().
col(xpr.lhs().
cols()-1),1,xpr.rhs().
cols()) )
481 template<
typename Scalar,
int Dim,
int Mode,
int Options,
typename RhsArg,
int ProductTag>
485 template<
typename Dest>
492 template<
typename ExpressionType,
int S
ide,
bool Transposed>
501 #endif // EIGEN_HOMOGENEOUS_H
ref_selector< MatrixType >::type MatrixTypeNested
#define EIGEN_STRONG_INLINE
MatrixOrTransformType type
helper::ConstantBlock ConstantBlock
static EIGEN_DEVICE_FUNC void run(DstXprType &dst, const SrcXprType &src, const internal::assign_op< Scalar, typename ArgType::Scalar > &)
Expression of the product of two arbitrary matrices or vectors.
remove_all< LhsMatrixType >::type LhsMatrixTypeCleaned
take_matrix_for_product< Lhs >::type LhsMatrixType
evaluator< RefactoredXpr > Base
const Block< const Derived, internal::traits< Derived >::RowsAtCompileTime, 1, !IsRowMajor > ConstColXpr
EIGEN_DEVICE_FUNC const HNormalizedReturnType hnormalized() const
column or row-wise homogeneous normalization
remove_all< typename Rhs::Nested >::type RhsNested
EIGEN_DEVICE_FUNC HomogeneousReturnType homogeneous() const
Expression of the transpose of a matrix.
helper::Xpr RefactoredXpr
remove_reference< MatrixTypeNested >::type _MatrixTypeNested
homogeneous_right_product_refactoring_helper< typename Lhs::NestedExpression, Rhs > helper
const Block< const Derived, internal::traits< Derived >::RowsAtCompileTime, N, !IsRowMajor > Type
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE internal::result_of< Func(Scalar, Scalar)>::type redux(const Func &func) const
Namespace containing all symbols from the Eigen library.
Rhs::template ConstNRowsBlockXpr< Dim >::Type LinearBlockConst
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE NRowsBlockXpr< internal::get_fixed_value< NRowsType >::value >::Type topRows(NRowsType n)
EIGEN_DEVICE_FUNC HomogeneousReturnType homogeneous() const
remove_all< MatrixType >::type MatrixTypeCleaned
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index cols() const EIGEN_NOEXCEPT
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index cols() const EIGEN_NOEXCEPT
homogeneous_left_product_refactoring_helper< Lhs, typename Rhs::NestedExpression > helper
Homogeneous< ArgType, Vertical > SrcXprType
static void evalTo(Dest &dst, const Lhs &lhs, const Homogeneous< RhsArg, Vertical > &rhs)
CwiseBinaryOp< internal::scalar_sum_op< typename Lhs::Scalar, typename Rhs::Scalar >, const LinearProduct, const ConstantBlock > Xpr
static EIGEN_DEVICE_FUNC void run(DstXprType &dst, const SrcXprType &src, const internal::assign_op< Scalar, typename ArgType::Scalar > &)
const unsigned int RowMajorBit
Lhs::template ConstNColsBlockXpr< Dim >::Type LinearBlockConst
Lhs::ConstColXpr ConstantColumn
Rhs::ConstRowXpr ConstantColumn
EIGEN_DEVICE_FUNC const HNormalizedReturnType hnormalized() const
homogeneous normalization
EIGEN_DEVICE_FUNC product_evaluator(const XprType &xpr)
LhsMatrixTypeCleaned::Nested m_lhs
Generic expression where a coefficient-wise binary operator is applied to two expressions.
const unsigned int HereditaryBits
EIGEN_DEVICE_FUNC void evalTo(Dest &dst) const
helper::Xpr RefactoredXpr
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index rows() const EIGEN_NOEXCEPT
EIGEN_DEVICE_FUNC void evalTo(Dest &dst) const
EIGEN_DEVICE_FUNC homogeneous_left_product_impl(const Lhs &lhs, const MatrixType &rhs)
make_proper_matrix_type< typename traits< MatrixType >::Scalar, MatrixType::RowsAtCompileTime, Rhs::ColsAtCompileTime, MatrixType::PlainObject::Options, MatrixType::MaxRowsAtCompileTime, Rhs::MaxColsAtCompileTime >::type ReturnType
EIGEN_DEVICE_FUNC homogeneous_right_product_impl(const MatrixType &lhs, const Rhs &rhs)
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
evaluator< PlainObject > Base
remove_all< typename LhsMatrixTypeCleaned::Nested >::type LhsMatrixTypeNested
Expression of the multiple replication of a matrix or vector.
helper::ConstantBlock ConstantBlock
remove_all< LhsMatrixType >::type LhsMatrixTypeCleaned
const Block< const Derived, 1, internal::traits< Derived >::ColsAtCompileTime, IsRowMajor > ConstRowXpr
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorUInt128< uint64_t, uint64_t > operator*(const TensorUInt128< HL, LL > &lhs, const TensorUInt128< HR, LR > &rhs)
Product< Lhs, Rhs, LazyProduct > XprType
static EIGEN_DEVICE_FUNC const type & run(const type &x)
traits< homogeneous_left_product_impl >::LhsMatrixType LhsMatrixType
Product< LinearBlock, Rhs, LazyProduct > LinearProduct
static EIGEN_DEVICE_FUNC void evalTo(Dest &dst, const Homogeneous< LhsArg, Horizontal > &lhs, const Rhs &rhs)
CwiseBinaryOp< internal::scalar_sum_op< typename Lhs::Scalar, typename Rhs::Scalar >, const LinearProduct, const ConstantBlock > Xpr
Product< Lhs, LinearBlock, LazyProduct > LinearProduct
EIGEN_DEVICE_FUNC const NestedExpression & nestedExpression() const
make_proper_matrix_type< typename traits< MatrixTypeCleaned >::Scalar, LhsMatrixTypeCleaned::RowsAtCompileTime, MatrixTypeCleaned::ColsAtCompileTime, MatrixTypeCleaned::PlainObject::Options, LhsMatrixTypeCleaned::MaxRowsAtCompileTime, MatrixTypeCleaned::MaxColsAtCompileTime >::type ReturnType
EIGEN_CONSTEXPR Index size(const T &x)
#define EIGEN_DEVICE_FUNC
remove_const< LinearBlockConst >::type LinearBlock
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index rows() const EIGEN_NOEXCEPT
Replicate< const ConstantColumn, 1, Cols > ConstantBlock
Expression of a fixed-size or dynamic-size block.
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index rows() const EIGEN_NOEXCEPT
storage_kind_to_evaluator_kind< typename ArgType::StorageKind >::Kind Kind
evaluator< RefactoredXpr > Base
#define EIGEN_DENSE_PUBLIC_INTERFACE(Derived)
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EvalReturnType eval() const
Homogeneous< ArgType, Direction > XprType
EIGEN_DEVICE_FUNC product_evaluator(const XprType &xpr)
static EIGEN_DEVICE_FUNC void evalTo(Dest &dst, const Lhs &lhs, const Homogeneous< RhsArg, Vertical > &rhs)
Homogeneous< ArgType, Horizontal > SrcXprType
Generic expression where a coefficient-wise unary operator is applied to an expression.
Product< Lhs, Rhs, LazyProduct > XprType
XprType::PlainObject PlainObject
Map< Matrix< T, Dynamic, Dynamic, ColMajor >, 0, OuterStride<> > matrix(T *data, int rows, int cols, int stride)
The matrix class, also used for vectors and row-vectors.
MatrixBase< Homogeneous > Base
traits< MatrixType >::StorageKind StorageKind
set noclip points set clip one set noclip two set bar set border lt lw set xdata set ydata set zdata set x2data set y2data set boxwidth set dummy x
MatrixType::Nested m_matrix
EIGEN_DEVICE_FUNC unary_evaluator(const XprType &op)
#define EIGEN_STATIC_ASSERT_VECTOR_ONLY(TYPE)
const Block< const Derived, N, internal::traits< Derived >::ColsAtCompileTime, IsRowMajor > Type
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE NColsBlockXpr< internal::get_fixed_value< NColsType >::value >::Type leftCols(NColsType n)
Replicate< const ConstantColumn, Rows, 1 > ConstantBlock
Base class for all dense matrices, vectors, and expressions.
remove_const< LinearBlockConst >::type LinearBlock
MatrixType NestedExpression
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index cols() const EIGEN_NOEXCEPT
Expression of one (or a set of) homogeneous vector(s)