@smake/eigen 1.0.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/eigen/COPYING.APACHE +203 -0
- package/eigen/COPYING.BSD +26 -0
- package/eigen/COPYING.GPL +674 -0
- package/eigen/COPYING.LGPL +502 -0
- package/eigen/COPYING.MINPACK +51 -0
- package/eigen/COPYING.MPL2 +373 -0
- package/eigen/COPYING.README +18 -0
- package/eigen/Eigen/Cholesky +0 -1
- package/eigen/Eigen/Core +108 -266
- package/eigen/Eigen/Eigenvalues +0 -1
- package/eigen/Eigen/Geometry +3 -6
- package/eigen/Eigen/Householder +0 -1
- package/eigen/Eigen/Jacobi +0 -1
- package/eigen/Eigen/KLUSupport +41 -0
- package/eigen/Eigen/LU +2 -5
- package/eigen/Eigen/OrderingMethods +0 -3
- package/eigen/Eigen/PaStiXSupport +1 -0
- package/eigen/Eigen/PardisoSupport +0 -0
- package/eigen/Eigen/QR +0 -1
- package/eigen/Eigen/QtAlignedMalloc +0 -1
- package/eigen/Eigen/SVD +0 -1
- package/eigen/Eigen/Sparse +0 -2
- package/eigen/Eigen/SparseCholesky +0 -8
- package/eigen/Eigen/SparseLU +4 -0
- package/eigen/Eigen/src/Cholesky/LDLT.h +42 -27
- package/eigen/Eigen/src/Cholesky/LLT.h +39 -23
- package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +90 -47
- package/eigen/Eigen/src/Core/ArithmeticSequence.h +413 -0
- package/eigen/Eigen/src/Core/Array.h +99 -11
- package/eigen/Eigen/src/Core/ArrayBase.h +1 -1
- package/eigen/Eigen/src/Core/ArrayWrapper.h +21 -21
- package/eigen/Eigen/src/Core/Assign.h +1 -1
- package/eigen/Eigen/src/Core/AssignEvaluator.h +125 -50
- package/eigen/Eigen/src/Core/Assign_MKL.h +10 -10
- package/eigen/Eigen/src/Core/BandMatrix.h +16 -16
- package/eigen/Eigen/src/Core/Block.h +56 -60
- package/eigen/Eigen/src/Core/BooleanRedux.h +29 -31
- package/eigen/Eigen/src/Core/CommaInitializer.h +7 -3
- package/eigen/Eigen/src/Core/CoreEvaluators.h +325 -272
- package/eigen/Eigen/src/Core/CoreIterators.h +5 -0
- package/eigen/Eigen/src/Core/CwiseBinaryOp.h +21 -22
- package/eigen/Eigen/src/Core/CwiseNullaryOp.h +153 -18
- package/eigen/Eigen/src/Core/CwiseUnaryOp.h +6 -6
- package/eigen/Eigen/src/Core/CwiseUnaryView.h +12 -10
- package/eigen/Eigen/src/Core/DenseBase.h +128 -39
- package/eigen/Eigen/src/Core/DenseCoeffsBase.h +25 -21
- package/eigen/Eigen/src/Core/DenseStorage.h +150 -68
- package/eigen/Eigen/src/Core/Diagonal.h +21 -23
- package/eigen/Eigen/src/Core/DiagonalMatrix.h +50 -2
- package/eigen/Eigen/src/Core/DiagonalProduct.h +1 -1
- package/eigen/Eigen/src/Core/Dot.h +10 -10
- package/eigen/Eigen/src/Core/EigenBase.h +10 -9
- package/eigen/Eigen/src/Core/ForceAlignedAccess.h +8 -4
- package/eigen/Eigen/src/Core/Fuzzy.h +3 -3
- package/eigen/Eigen/src/Core/GeneralProduct.h +20 -10
- package/eigen/Eigen/src/Core/GenericPacketMath.h +597 -147
- package/eigen/Eigen/src/Core/GlobalFunctions.h +40 -33
- package/eigen/Eigen/src/Core/IO.h +40 -7
- package/eigen/Eigen/src/Core/IndexedView.h +237 -0
- package/eigen/Eigen/src/Core/Inverse.h +9 -10
- package/eigen/Eigen/src/Core/Map.h +7 -7
- package/eigen/Eigen/src/Core/MapBase.h +5 -3
- package/eigen/Eigen/src/Core/MathFunctions.h +756 -120
- package/eigen/Eigen/src/Core/MathFunctionsImpl.h +118 -19
- package/eigen/Eigen/src/Core/Matrix.h +131 -25
- package/eigen/Eigen/src/Core/MatrixBase.h +19 -2
- package/eigen/Eigen/src/Core/NestByValue.h +25 -50
- package/eigen/Eigen/src/Core/NoAlias.h +4 -3
- package/eigen/Eigen/src/Core/NumTraits.h +107 -20
- package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +232 -0
- package/eigen/Eigen/src/Core/PermutationMatrix.h +3 -3
- package/eigen/Eigen/src/Core/PlainObjectBase.h +145 -54
- package/eigen/Eigen/src/Core/Product.h +30 -25
- package/eigen/Eigen/src/Core/ProductEvaluators.h +183 -142
- package/eigen/Eigen/src/Core/Random.h +37 -1
- package/eigen/Eigen/src/Core/Redux.h +180 -170
- package/eigen/Eigen/src/Core/Ref.h +118 -21
- package/eigen/Eigen/src/Core/Replicate.h +8 -8
- package/eigen/Eigen/src/Core/Reshaped.h +454 -0
- package/eigen/Eigen/src/Core/ReturnByValue.h +7 -5
- package/eigen/Eigen/src/Core/Reverse.h +18 -12
- package/eigen/Eigen/src/Core/Select.h +8 -6
- package/eigen/Eigen/src/Core/SelfAdjointView.h +33 -20
- package/eigen/Eigen/src/Core/Solve.h +14 -14
- package/eigen/Eigen/src/Core/SolveTriangular.h +13 -13
- package/eigen/Eigen/src/Core/SolverBase.h +41 -3
- package/eigen/Eigen/src/Core/StableNorm.h +100 -70
- package/eigen/Eigen/src/Core/StlIterators.h +463 -0
- package/eigen/Eigen/src/Core/Stride.h +9 -4
- package/eigen/Eigen/src/Core/Swap.h +5 -4
- package/eigen/Eigen/src/Core/Transpose.h +86 -27
- package/eigen/Eigen/src/Core/Transpositions.h +26 -8
- package/eigen/Eigen/src/Core/TriangularMatrix.h +88 -72
- package/eigen/Eigen/src/Core/VectorBlock.h +5 -5
- package/eigen/Eigen/src/Core/VectorwiseOp.h +159 -70
- package/eigen/Eigen/src/Core/Visitor.h +137 -29
- package/eigen/Eigen/src/Core/arch/AVX/Complex.h +50 -129
- package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +126 -337
- package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +1092 -155
- package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +65 -1
- package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +422 -0
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +186 -213
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1250 -252
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +89 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +152 -165
- package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +19 -251
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2937 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +221 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +629 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +2042 -392
- package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +235 -80
- package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +700 -0
- package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +102 -14
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1649 -0
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +110 -0
- package/eigen/Eigen/src/Core/arch/Default/Half.h +942 -0
- package/eigen/Eigen/src/Core/arch/Default/Settings.h +1 -1
- package/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +120 -0
- package/eigen/Eigen/src/Core/arch/{CUDA → GPU}/MathFunctions.h +16 -4
- package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1685 -0
- package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +80 -0
- package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
- package/eigen/Eigen/src/Core/arch/MSA/Complex.h +648 -0
- package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +387 -0
- package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1233 -0
- package/eigen/Eigen/src/Core/arch/NEON/Complex.h +313 -219
- package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +183 -0
- package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +54 -70
- package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4376 -549
- package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1419 -0
- package/eigen/Eigen/src/Core/arch/SSE/Complex.h +59 -179
- package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +65 -428
- package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +893 -283
- package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +65 -0
- package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +44 -0
- package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +752 -0
- package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +49 -0
- package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +232 -0
- package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +301 -0
- package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +670 -0
- package/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +694 -0
- package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +85 -0
- package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +212 -183
- package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +101 -5
- package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +510 -395
- package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +11 -2
- package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +112 -46
- package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +31 -30
- package/eigen/Eigen/src/Core/functors/StlFunctors.h +32 -2
- package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +354 -15
- package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1073 -585
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +29 -7
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +4 -4
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +1 -1
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +382 -483
- package/eigen/Eigen/src/Core/products/Parallelizer.h +23 -9
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +23 -6
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +8 -6
- package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +2 -2
- package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +5 -4
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +3 -3
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +5 -3
- package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +13 -10
- package/eigen/Eigen/src/Core/util/BlasUtil.h +208 -124
- package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +512 -0
- package/eigen/Eigen/src/Core/util/Constants.h +25 -9
- package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +14 -2
- package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +28 -4
- package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +186 -0
- package/eigen/Eigen/src/Core/util/IntegralConstant.h +272 -0
- package/eigen/Eigen/src/Core/util/MKL_support.h +8 -1
- package/eigen/Eigen/src/Core/util/Macros.h +661 -250
- package/eigen/Eigen/src/Core/util/Memory.h +222 -52
- package/eigen/Eigen/src/Core/util/Meta.h +349 -105
- package/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
- package/eigen/Eigen/src/Core/util/StaticAssert.h +8 -5
- package/eigen/Eigen/src/Core/util/SymbolicIndex.h +293 -0
- package/eigen/Eigen/src/Core/util/XprHelper.h +48 -30
- package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +1 -1
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +1 -1
- package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +2 -2
- package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +1 -1
- package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +2 -2
- package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +2 -2
- package/eigen/Eigen/src/Eigenvalues/RealQZ.h +9 -6
- package/eigen/Eigen/src/Eigenvalues/RealSchur.h +10 -5
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +75 -42
- package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +20 -15
- package/eigen/Eigen/src/Geometry/AlignedBox.h +99 -5
- package/eigen/Eigen/src/Geometry/AngleAxis.h +4 -4
- package/eigen/Eigen/src/Geometry/EulerAngles.h +3 -3
- package/eigen/Eigen/src/Geometry/Homogeneous.h +15 -11
- package/eigen/Eigen/src/Geometry/Hyperplane.h +1 -1
- package/eigen/Eigen/src/Geometry/OrthoMethods.h +3 -2
- package/eigen/Eigen/src/Geometry/ParametrizedLine.h +39 -2
- package/eigen/Eigen/src/Geometry/Quaternion.h +52 -14
- package/eigen/Eigen/src/Geometry/Rotation2D.h +3 -3
- package/eigen/Eigen/src/Geometry/Scaling.h +22 -4
- package/eigen/Eigen/src/Geometry/Transform.h +86 -65
- package/eigen/Eigen/src/Geometry/Translation.h +6 -6
- package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +168 -0
- package/eigen/Eigen/src/Householder/BlockHouseholder.h +9 -2
- package/eigen/Eigen/src/Householder/Householder.h +8 -4
- package/eigen/Eigen/src/Householder/HouseholderSequence.h +123 -48
- package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +15 -15
- package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +7 -23
- package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +5 -22
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +41 -47
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +51 -60
- package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +70 -20
- package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +2 -20
- package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +11 -9
- package/eigen/Eigen/src/Jacobi/Jacobi.h +31 -10
- package/eigen/Eigen/src/KLUSupport/KLUSupport.h +358 -0
- package/eigen/Eigen/src/LU/Determinant.h +35 -19
- package/eigen/Eigen/src/LU/FullPivLU.h +29 -43
- package/eigen/Eigen/src/LU/InverseImpl.h +25 -8
- package/eigen/Eigen/src/LU/PartialPivLU.h +67 -57
- package/eigen/Eigen/src/LU/arch/InverseSize4.h +351 -0
- package/eigen/Eigen/src/OrderingMethods/Amd.h +7 -17
- package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +297 -277
- package/eigen/Eigen/src/OrderingMethods/Ordering.h +6 -10
- package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +1 -1
- package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +10 -9
- package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +41 -20
- package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +100 -27
- package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +59 -22
- package/eigen/Eigen/src/QR/HouseholderQR.h +48 -23
- package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +25 -3
- package/eigen/Eigen/src/SVD/BDCSVD.h +137 -48
- package/eigen/Eigen/src/SVD/JacobiSVD.h +22 -14
- package/eigen/Eigen/src/SVD/SVDBase.h +82 -21
- package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +3 -3
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +16 -8
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +11 -36
- package/eigen/Eigen/src/SparseCore/CompressedStorage.h +16 -0
- package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +6 -6
- package/eigen/Eigen/src/SparseCore/SparseAssign.h +81 -27
- package/eigen/Eigen/src/SparseCore/SparseBlock.h +25 -57
- package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +40 -11
- package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +11 -15
- package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +2 -2
- package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +30 -8
- package/eigen/Eigen/src/SparseCore/SparseMatrix.h +124 -10
- package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +5 -12
- package/eigen/Eigen/src/SparseCore/SparseProduct.h +13 -1
- package/eigen/Eigen/src/SparseCore/SparseRef.h +7 -7
- package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +3 -0
- package/eigen/Eigen/src/SparseCore/SparseUtil.h +8 -0
- package/eigen/Eigen/src/SparseCore/SparseVector.h +1 -1
- package/eigen/Eigen/src/SparseLU/SparseLU.h +160 -10
- package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +1 -1
- package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +76 -2
- package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +2 -2
- package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +1 -1
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +1 -1
- package/eigen/Eigen/src/SparseQR/SparseQR.h +19 -6
- package/eigen/Eigen/src/StlSupport/StdDeque.h +2 -14
- package/eigen/Eigen/src/StlSupport/StdList.h +2 -2
- package/eigen/Eigen/src/StlSupport/StdVector.h +2 -2
- package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +6 -8
- package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +175 -39
- package/eigen/Eigen/src/misc/lapacke.h +5 -4
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +27 -1
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +155 -11
- package/eigen/Eigen/src/plugins/BlockMethods.h +626 -242
- package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +14 -0
- package/eigen/Eigen/src/plugins/IndexedViewMethods.h +262 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +4 -4
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +10 -0
- package/eigen/Eigen/src/plugins/ReshapedMethods.h +149 -0
- package/eigen/README.md +5 -0
- package/lib/LibEigen.d.ts +4 -0
- package/lib/LibEigen.js +14 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.js +7 -3
- package/package.json +2 -10
- package/eigen/Eigen/CMakeLists.txt +0 -19
- package/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -675
- package/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
- package/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
- package/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
- package/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
- package/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
- package/lib/eigen.d.ts +0 -2
- package/lib/eigen.js +0 -15
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
#ifndef EIGEN_HOMOGENEOUS_H
|
|
11
11
|
#define EIGEN_HOMOGENEOUS_H
|
|
12
12
|
|
|
13
|
-
namespace Eigen {
|
|
13
|
+
namespace Eigen {
|
|
14
14
|
|
|
15
15
|
/** \geometry_module \ingroup Geometry_Module
|
|
16
16
|
*
|
|
@@ -72,9 +72,11 @@ template<typename MatrixType,int _Direction> class Homogeneous
|
|
|
72
72
|
: m_matrix(matrix)
|
|
73
73
|
{}
|
|
74
74
|
|
|
75
|
-
EIGEN_DEVICE_FUNC
|
|
76
|
-
|
|
77
|
-
|
|
75
|
+
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
|
|
76
|
+
inline Index rows() const EIGEN_NOEXCEPT { return m_matrix.rows() + (int(Direction)==Vertical ? 1 : 0); }
|
|
77
|
+
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
|
|
78
|
+
inline Index cols() const EIGEN_NOEXCEPT { return m_matrix.cols() + (int(Direction)==Horizontal ? 1 : 0); }
|
|
79
|
+
|
|
78
80
|
EIGEN_DEVICE_FUNC const NestedExpression& nestedExpression() const { return m_matrix; }
|
|
79
81
|
|
|
80
82
|
template<typename Rhs>
|
|
@@ -262,8 +264,10 @@ struct homogeneous_left_product_impl<Homogeneous<MatrixType,Vertical>,Lhs>
|
|
|
262
264
|
m_rhs(rhs)
|
|
263
265
|
{}
|
|
264
266
|
|
|
265
|
-
EIGEN_DEVICE_FUNC
|
|
266
|
-
|
|
267
|
+
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
|
|
268
|
+
inline Index rows() const EIGEN_NOEXCEPT { return m_lhs.rows(); }
|
|
269
|
+
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
|
|
270
|
+
inline Index cols() const EIGEN_NOEXCEPT { return m_rhs.cols(); }
|
|
267
271
|
|
|
268
272
|
template<typename Dest> EIGEN_DEVICE_FUNC void evalTo(Dest& dst) const
|
|
269
273
|
{
|
|
@@ -300,8 +304,8 @@ struct homogeneous_right_product_impl<Homogeneous<MatrixType,Horizontal>,Rhs>
|
|
|
300
304
|
: m_lhs(lhs), m_rhs(rhs)
|
|
301
305
|
{}
|
|
302
306
|
|
|
303
|
-
EIGEN_DEVICE_FUNC inline Index rows() const { return m_lhs.rows(); }
|
|
304
|
-
EIGEN_DEVICE_FUNC inline Index cols() const { return m_rhs.cols(); }
|
|
307
|
+
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR inline Index rows() const EIGEN_NOEXCEPT { return m_lhs.rows(); }
|
|
308
|
+
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR inline Index cols() const EIGEN_NOEXCEPT { return m_rhs.cols(); }
|
|
305
309
|
|
|
306
310
|
template<typename Dest> EIGEN_DEVICE_FUNC void evalTo(Dest& dst) const
|
|
307
311
|
{
|
|
@@ -322,7 +326,7 @@ template<typename ArgType,int Direction>
|
|
|
322
326
|
struct evaluator_traits<Homogeneous<ArgType,Direction> >
|
|
323
327
|
{
|
|
324
328
|
typedef typename storage_kind_to_evaluator_kind<typename ArgType::StorageKind>::Kind Kind;
|
|
325
|
-
typedef HomogeneousShape Shape;
|
|
329
|
+
typedef HomogeneousShape Shape;
|
|
326
330
|
};
|
|
327
331
|
|
|
328
332
|
template<> struct AssignmentKind<DenseShape,HomogeneousShape> { typedef Dense2Dense Kind; };
|
|
@@ -414,7 +418,7 @@ struct product_evaluator<Product<Lhs, Rhs, LazyProduct>, ProductTag, Homogeneous
|
|
|
414
418
|
typedef typename helper::ConstantBlock ConstantBlock;
|
|
415
419
|
typedef typename helper::Xpr RefactoredXpr;
|
|
416
420
|
typedef evaluator<RefactoredXpr> Base;
|
|
417
|
-
|
|
421
|
+
|
|
418
422
|
EIGEN_DEVICE_FUNC explicit product_evaluator(const XprType& xpr)
|
|
419
423
|
: Base( xpr.lhs().nestedExpression() .lazyProduct( xpr.rhs().template topRows<helper::Dim>(xpr.lhs().nestedExpression().cols()) )
|
|
420
424
|
+ ConstantBlock(xpr.rhs().row(xpr.rhs().rows()-1),xpr.lhs().rows(), 1) )
|
|
@@ -467,7 +471,7 @@ struct product_evaluator<Product<Lhs, Rhs, LazyProduct>, ProductTag, DenseShape,
|
|
|
467
471
|
typedef typename helper::ConstantBlock ConstantBlock;
|
|
468
472
|
typedef typename helper::Xpr RefactoredXpr;
|
|
469
473
|
typedef evaluator<RefactoredXpr> Base;
|
|
470
|
-
|
|
474
|
+
|
|
471
475
|
EIGEN_DEVICE_FUNC explicit product_evaluator(const XprType& xpr)
|
|
472
476
|
: Base( xpr.lhs().template leftCols<helper::Dim>(xpr.rhs().nestedExpression().rows()) .lazyProduct( xpr.rhs().nestedExpression() )
|
|
473
477
|
+ ConstantBlock(xpr.lhs().col(xpr.lhs().cols()-1),1,xpr.rhs().cols()) )
|
|
@@ -119,7 +119,7 @@ public:
|
|
|
119
119
|
* If the dimension of the ambient space is greater than 2, then there isn't uniqueness,
|
|
120
120
|
* so an arbitrary choice is made.
|
|
121
121
|
*/
|
|
122
|
-
// FIXME to be
|
|
122
|
+
// FIXME to be consistent with the rest this could be implemented as a static Through function ??
|
|
123
123
|
EIGEN_DEVICE_FUNC explicit Hyperplane(const ParametrizedLine<Scalar, AmbientDimAtCompileTime>& parametrized)
|
|
124
124
|
{
|
|
125
125
|
normal() = parametrized.direction().unitOrthogonal();
|
|
@@ -27,9 +27,10 @@ namespace Eigen {
|
|
|
27
27
|
template<typename Derived>
|
|
28
28
|
template<typename OtherDerived>
|
|
29
29
|
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
30
|
-
EIGEN_DEVICE_FUNC
|
|
30
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
31
|
+
typename MatrixBase<Derived>::template cross_product_return_type<OtherDerived>::type
|
|
31
32
|
#else
|
|
32
|
-
|
|
33
|
+
typename MatrixBase<Derived>::PlainObject
|
|
33
34
|
#endif
|
|
34
35
|
MatrixBase<Derived>::cross(const MatrixBase<OtherDerived>& other) const
|
|
35
36
|
{
|
|
@@ -87,7 +87,7 @@ public:
|
|
|
87
87
|
/** \returns the distance of a point \a p to its projection onto the line \c *this.
|
|
88
88
|
* \sa squaredDistance()
|
|
89
89
|
*/
|
|
90
|
-
EIGEN_DEVICE_FUNC RealScalar distance(const VectorType& p) const {
|
|
90
|
+
EIGEN_DEVICE_FUNC RealScalar distance(const VectorType& p) const { EIGEN_USING_STD(sqrt) return sqrt(squaredDistance(p)); }
|
|
91
91
|
|
|
92
92
|
/** \returns the projection of a point \a p onto the line \c *this. */
|
|
93
93
|
EIGEN_DEVICE_FUNC VectorType projection(const VectorType& p) const
|
|
@@ -104,7 +104,44 @@ public:
|
|
|
104
104
|
template <int OtherOptions>
|
|
105
105
|
EIGEN_DEVICE_FUNC VectorType intersectionPoint(const Hyperplane<_Scalar, _AmbientDim, OtherOptions>& hyperplane) const;
|
|
106
106
|
|
|
107
|
-
/** \
|
|
107
|
+
/** Applies the transformation matrix \a mat to \c *this and returns a reference to \c *this.
|
|
108
|
+
*
|
|
109
|
+
* \param mat the Dim x Dim transformation matrix
|
|
110
|
+
* \param traits specifies whether the matrix \a mat represents an #Isometry
|
|
111
|
+
* or a more generic #Affine transformation. The default is #Affine.
|
|
112
|
+
*/
|
|
113
|
+
template<typename XprType>
|
|
114
|
+
EIGEN_DEVICE_FUNC inline ParametrizedLine& transform(const MatrixBase<XprType>& mat, TransformTraits traits = Affine)
|
|
115
|
+
{
|
|
116
|
+
if (traits==Affine)
|
|
117
|
+
direction() = (mat * direction()).normalized();
|
|
118
|
+
else if (traits==Isometry)
|
|
119
|
+
direction() = mat * direction();
|
|
120
|
+
else
|
|
121
|
+
{
|
|
122
|
+
eigen_assert(0 && "invalid traits value in ParametrizedLine::transform()");
|
|
123
|
+
}
|
|
124
|
+
origin() = mat * origin();
|
|
125
|
+
return *this;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/** Applies the transformation \a t to \c *this and returns a reference to \c *this.
|
|
129
|
+
*
|
|
130
|
+
* \param t the transformation of dimension Dim
|
|
131
|
+
* \param traits specifies whether the transformation \a t represents an #Isometry
|
|
132
|
+
* or a more generic #Affine transformation. The default is #Affine.
|
|
133
|
+
* Other kind of transformations are not supported.
|
|
134
|
+
*/
|
|
135
|
+
template<int TrOptions>
|
|
136
|
+
EIGEN_DEVICE_FUNC inline ParametrizedLine& transform(const Transform<Scalar,AmbientDimAtCompileTime,Affine,TrOptions>& t,
|
|
137
|
+
TransformTraits traits = Affine)
|
|
138
|
+
{
|
|
139
|
+
transform(t.linear(), traits);
|
|
140
|
+
origin() += t.translation();
|
|
141
|
+
return *this;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/** \returns \c *this with scalar type casted to \a NewScalarType
|
|
108
145
|
*
|
|
109
146
|
* Note that if \a NewScalarType is equal to the current scalar type of \c *this
|
|
110
147
|
* then this function smartly returns a const reference to \c *this.
|
|
@@ -141,7 +141,7 @@ class QuaternionBase : public RotationBase<Derived, 3>
|
|
|
141
141
|
template<class OtherDerived> EIGEN_DEVICE_FUNC Scalar angularDistance(const QuaternionBase<OtherDerived>& other) const;
|
|
142
142
|
|
|
143
143
|
/** \returns an equivalent 3x3 rotation matrix */
|
|
144
|
-
EIGEN_DEVICE_FUNC Matrix3 toRotationMatrix() const;
|
|
144
|
+
EIGEN_DEVICE_FUNC inline Matrix3 toRotationMatrix() const;
|
|
145
145
|
|
|
146
146
|
/** \returns the quaternion which transform \a a into \a b through a rotation */
|
|
147
147
|
template<typename Derived1, typename Derived2>
|
|
@@ -158,6 +158,22 @@ class QuaternionBase : public RotationBase<Derived, 3>
|
|
|
158
158
|
|
|
159
159
|
template<class OtherDerived> EIGEN_DEVICE_FUNC Quaternion<Scalar> slerp(const Scalar& t, const QuaternionBase<OtherDerived>& other) const;
|
|
160
160
|
|
|
161
|
+
/** \returns true if each coefficients of \c *this and \a other are all exactly equal.
|
|
162
|
+
* \warning When using floating point scalar values you probably should rather use a
|
|
163
|
+
* fuzzy comparison such as isApprox()
|
|
164
|
+
* \sa isApprox(), operator!= */
|
|
165
|
+
template<class OtherDerived>
|
|
166
|
+
EIGEN_DEVICE_FUNC inline bool operator==(const QuaternionBase<OtherDerived>& other) const
|
|
167
|
+
{ return coeffs() == other.coeffs(); }
|
|
168
|
+
|
|
169
|
+
/** \returns true if at least one pair of coefficients of \c *this and \a other are not exactly equal to each other.
|
|
170
|
+
* \warning When using floating point scalar values you probably should rather use a
|
|
171
|
+
* fuzzy comparison such as isApprox()
|
|
172
|
+
* \sa isApprox(), operator== */
|
|
173
|
+
template<class OtherDerived>
|
|
174
|
+
EIGEN_DEVICE_FUNC inline bool operator!=(const QuaternionBase<OtherDerived>& other) const
|
|
175
|
+
{ return coeffs() != other.coeffs(); }
|
|
176
|
+
|
|
161
177
|
/** \returns \c true if \c *this is approximately equal to \a other, within the precision
|
|
162
178
|
* determined by \a prec.
|
|
163
179
|
*
|
|
@@ -181,20 +197,27 @@ class QuaternionBase : public RotationBase<Derived, 3>
|
|
|
181
197
|
#else
|
|
182
198
|
|
|
183
199
|
template<typename NewScalarType>
|
|
184
|
-
EIGEN_DEVICE_FUNC inline
|
|
200
|
+
EIGEN_DEVICE_FUNC inline
|
|
185
201
|
typename internal::enable_if<internal::is_same<Scalar,NewScalarType>::value,const Derived&>::type cast() const
|
|
186
202
|
{
|
|
187
203
|
return derived();
|
|
188
204
|
}
|
|
189
205
|
|
|
190
206
|
template<typename NewScalarType>
|
|
191
|
-
EIGEN_DEVICE_FUNC inline
|
|
207
|
+
EIGEN_DEVICE_FUNC inline
|
|
192
208
|
typename internal::enable_if<!internal::is_same<Scalar,NewScalarType>::value,Quaternion<NewScalarType> >::type cast() const
|
|
193
209
|
{
|
|
194
210
|
return Quaternion<NewScalarType>(coeffs().template cast<NewScalarType>());
|
|
195
211
|
}
|
|
196
212
|
#endif
|
|
197
213
|
|
|
214
|
+
#ifndef EIGEN_NO_IO
|
|
215
|
+
friend std::ostream& operator<<(std::ostream& s, const QuaternionBase<Derived>& q) {
|
|
216
|
+
s << q.x() << "i + " << q.y() << "j + " << q.z() << "k" << " + " << q.w();
|
|
217
|
+
return s;
|
|
218
|
+
}
|
|
219
|
+
#endif
|
|
220
|
+
|
|
198
221
|
#ifdef EIGEN_QUATERNIONBASE_PLUGIN
|
|
199
222
|
# include EIGEN_QUATERNIONBASE_PLUGIN
|
|
200
223
|
#endif
|
|
@@ -294,6 +317,21 @@ public:
|
|
|
294
317
|
EIGEN_DEVICE_FUNC explicit inline Quaternion(const Quaternion<OtherScalar, OtherOptions>& other)
|
|
295
318
|
{ m_coeffs = other.coeffs().template cast<Scalar>(); }
|
|
296
319
|
|
|
320
|
+
#if EIGEN_HAS_RVALUE_REFERENCES
|
|
321
|
+
// We define a copy constructor, which means we don't get an implicit move constructor or assignment operator.
|
|
322
|
+
/** Default move constructor */
|
|
323
|
+
EIGEN_DEVICE_FUNC inline Quaternion(Quaternion&& other) EIGEN_NOEXCEPT_IF(std::is_nothrow_move_constructible<Scalar>::value)
|
|
324
|
+
: m_coeffs(std::move(other.coeffs()))
|
|
325
|
+
{}
|
|
326
|
+
|
|
327
|
+
/** Default move assignment operator */
|
|
328
|
+
EIGEN_DEVICE_FUNC Quaternion& operator=(Quaternion&& other) EIGEN_NOEXCEPT_IF(std::is_nothrow_move_assignable<Scalar>::value)
|
|
329
|
+
{
|
|
330
|
+
m_coeffs = std::move(other.coeffs());
|
|
331
|
+
return *this;
|
|
332
|
+
}
|
|
333
|
+
#endif
|
|
334
|
+
|
|
297
335
|
EIGEN_DEVICE_FUNC static Quaternion UnitRandom();
|
|
298
336
|
|
|
299
337
|
template<typename Derived1, typename Derived2>
|
|
@@ -522,8 +560,8 @@ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived& QuaternionBase<Derived>::operator
|
|
|
522
560
|
template<class Derived>
|
|
523
561
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived& QuaternionBase<Derived>::operator=(const AngleAxisType& aa)
|
|
524
562
|
{
|
|
525
|
-
|
|
526
|
-
|
|
563
|
+
EIGEN_USING_STD(cos)
|
|
564
|
+
EIGEN_USING_STD(sin)
|
|
527
565
|
Scalar ha = Scalar(0.5)*aa.angle(); // Scalar(0.5) to suppress precision loss warnings
|
|
528
566
|
this->w() = cos(ha);
|
|
529
567
|
this->vec() = sin(ha) * aa.axis();
|
|
@@ -599,7 +637,7 @@ template<class Derived>
|
|
|
599
637
|
template<typename Derived1, typename Derived2>
|
|
600
638
|
EIGEN_DEVICE_FUNC inline Derived& QuaternionBase<Derived>::setFromTwoVectors(const MatrixBase<Derived1>& a, const MatrixBase<Derived2>& b)
|
|
601
639
|
{
|
|
602
|
-
|
|
640
|
+
EIGEN_USING_STD(sqrt)
|
|
603
641
|
Vector3 v0 = a.normalized();
|
|
604
642
|
Vector3 v1 = b.normalized();
|
|
605
643
|
Scalar c = v1.dot(v0);
|
|
@@ -640,13 +678,13 @@ EIGEN_DEVICE_FUNC inline Derived& QuaternionBase<Derived>::setFromTwoVectors(con
|
|
|
640
678
|
template<typename Scalar, int Options>
|
|
641
679
|
EIGEN_DEVICE_FUNC Quaternion<Scalar,Options> Quaternion<Scalar,Options>::UnitRandom()
|
|
642
680
|
{
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
681
|
+
EIGEN_USING_STD(sqrt)
|
|
682
|
+
EIGEN_USING_STD(sin)
|
|
683
|
+
EIGEN_USING_STD(cos)
|
|
646
684
|
const Scalar u1 = internal::random<Scalar>(0, 1),
|
|
647
685
|
u2 = internal::random<Scalar>(0, 2*EIGEN_PI),
|
|
648
686
|
u3 = internal::random<Scalar>(0, 2*EIGEN_PI);
|
|
649
|
-
const Scalar a = sqrt(1 - u1),
|
|
687
|
+
const Scalar a = sqrt(Scalar(1) - u1),
|
|
650
688
|
b = sqrt(u1);
|
|
651
689
|
return Quaternion (a * sin(u2), a * cos(u2), b * sin(u3), b * cos(u3));
|
|
652
690
|
}
|
|
@@ -725,7 +763,7 @@ template <class OtherDerived>
|
|
|
725
763
|
EIGEN_DEVICE_FUNC inline typename internal::traits<Derived>::Scalar
|
|
726
764
|
QuaternionBase<Derived>::angularDistance(const QuaternionBase<OtherDerived>& other) const
|
|
727
765
|
{
|
|
728
|
-
|
|
766
|
+
EIGEN_USING_STD(atan2)
|
|
729
767
|
Quaternion<Scalar> d = (*this) * other.conjugate();
|
|
730
768
|
return Scalar(2) * atan2( d.vec().norm(), numext::abs(d.w()) );
|
|
731
769
|
}
|
|
@@ -743,8 +781,8 @@ template <class OtherDerived>
|
|
|
743
781
|
EIGEN_DEVICE_FUNC Quaternion<typename internal::traits<Derived>::Scalar>
|
|
744
782
|
QuaternionBase<Derived>::slerp(const Scalar& t, const QuaternionBase<OtherDerived>& other) const
|
|
745
783
|
{
|
|
746
|
-
|
|
747
|
-
|
|
784
|
+
EIGEN_USING_STD(acos)
|
|
785
|
+
EIGEN_USING_STD(sin)
|
|
748
786
|
const Scalar one = Scalar(1) - NumTraits<Scalar>::epsilon();
|
|
749
787
|
Scalar d = this->dot(other);
|
|
750
788
|
Scalar absD = numext::abs(d);
|
|
@@ -781,7 +819,7 @@ struct quaternionbase_assign_impl<Other,3,3>
|
|
|
781
819
|
template<class Derived> EIGEN_DEVICE_FUNC static inline void run(QuaternionBase<Derived>& q, const Other& a_mat)
|
|
782
820
|
{
|
|
783
821
|
const typename internal::nested_eval<Other,2>::type mat(a_mat);
|
|
784
|
-
|
|
822
|
+
EIGEN_USING_STD(sqrt)
|
|
785
823
|
// This algorithm comes from "Quaternion Calculus and Fast Animation",
|
|
786
824
|
// Ken Shoemake, 1987 SIGGRAPH course notes
|
|
787
825
|
Scalar t = mat.trace();
|
|
@@ -175,7 +175,7 @@ template<typename Scalar>
|
|
|
175
175
|
template<typename Derived>
|
|
176
176
|
EIGEN_DEVICE_FUNC Rotation2D<Scalar>& Rotation2D<Scalar>::fromRotationMatrix(const MatrixBase<Derived>& mat)
|
|
177
177
|
{
|
|
178
|
-
|
|
178
|
+
EIGEN_USING_STD(atan2)
|
|
179
179
|
EIGEN_STATIC_ASSERT(Derived::RowsAtCompileTime==2 && Derived::ColsAtCompileTime==2,YOU_MADE_A_PROGRAMMING_MISTAKE)
|
|
180
180
|
m_angle = atan2(mat.coeff(1,0), mat.coeff(0,0));
|
|
181
181
|
return *this;
|
|
@@ -187,8 +187,8 @@ template<typename Scalar>
|
|
|
187
187
|
typename Rotation2D<Scalar>::Matrix2
|
|
188
188
|
EIGEN_DEVICE_FUNC Rotation2D<Scalar>::toRotationMatrix(void) const
|
|
189
189
|
{
|
|
190
|
-
|
|
191
|
-
|
|
190
|
+
EIGEN_USING_STD(sin)
|
|
191
|
+
EIGEN_USING_STD(cos)
|
|
192
192
|
Scalar sinA = sin(m_angle);
|
|
193
193
|
Scalar cosA = cos(m_angle);
|
|
194
194
|
return (Matrix2() << cosA, -sinA, sinA, cosA).finished();
|
|
@@ -29,6 +29,22 @@ namespace Eigen {
|
|
|
29
29
|
*
|
|
30
30
|
* \sa Scaling(), class DiagonalMatrix, MatrixBase::asDiagonal(), class Translation, class Transform
|
|
31
31
|
*/
|
|
32
|
+
|
|
33
|
+
namespace internal
|
|
34
|
+
{
|
|
35
|
+
// This helper helps nvcc+MSVC to properly parse this file.
|
|
36
|
+
// See bug 1412.
|
|
37
|
+
template <typename Scalar, int Dim, int Mode>
|
|
38
|
+
struct uniformscaling_times_affine_returntype
|
|
39
|
+
{
|
|
40
|
+
enum
|
|
41
|
+
{
|
|
42
|
+
NewMode = int(Mode) == int(Isometry) ? Affine : Mode
|
|
43
|
+
};
|
|
44
|
+
typedef Transform <Scalar, Dim, NewMode> type;
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
|
|
32
48
|
template<typename _Scalar>
|
|
33
49
|
class UniformScaling
|
|
34
50
|
{
|
|
@@ -60,9 +76,11 @@ public:
|
|
|
60
76
|
|
|
61
77
|
/** Concatenates a uniform scaling and an affine transformation */
|
|
62
78
|
template<int Dim, int Mode, int Options>
|
|
63
|
-
inline
|
|
79
|
+
inline typename
|
|
80
|
+
internal::uniformscaling_times_affine_returntype<Scalar,Dim,Mode>::type
|
|
81
|
+
operator* (const Transform<Scalar, Dim, Mode, Options>& t) const
|
|
64
82
|
{
|
|
65
|
-
|
|
83
|
+
typename internal::uniformscaling_times_affine_returntype<Scalar,Dim,Mode>::type res = t;
|
|
66
84
|
res.prescale(factor());
|
|
67
85
|
return res;
|
|
68
86
|
}
|
|
@@ -70,7 +88,7 @@ public:
|
|
|
70
88
|
/** Concatenates a uniform scaling and a linear transformation matrix */
|
|
71
89
|
// TODO returns an expression
|
|
72
90
|
template<typename Derived>
|
|
73
|
-
inline typename internal::plain_matrix_type<Derived>::type operator* (const MatrixBase<Derived>& other) const
|
|
91
|
+
inline typename Eigen::internal::plain_matrix_type<Derived>::type operator* (const MatrixBase<Derived>& other) const
|
|
74
92
|
{ return other * m_factor; }
|
|
75
93
|
|
|
76
94
|
template<typename Derived,int Dim>
|
|
@@ -110,7 +128,7 @@ public:
|
|
|
110
128
|
/** Concatenates a linear transformation matrix and a uniform scaling
|
|
111
129
|
* \relates UniformScaling
|
|
112
130
|
*/
|
|
113
|
-
// NOTE this operator is
|
|
131
|
+
// NOTE this operator is defined in MatrixBase and not as a friend function
|
|
114
132
|
// of UniformScaling to fix an internal crash of Intel's ICC
|
|
115
133
|
template<typename Derived,typename Scalar>
|
|
116
134
|
EIGEN_EXPR_BINARYOP_SCALAR_RETURN_TYPE(Derived,Scalar,product)
|