ruby-eigen 0.0.9 → 0.0.10.pre1

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.
Files changed (293) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +22 -0
  3. data/README.md +21 -0
  4. data/ext/eigen/eigen3/COPYING.BSD +26 -0
  5. data/ext/eigen/eigen3/COPYING.MPL2 +373 -0
  6. data/ext/eigen/eigen3/COPYING.README +18 -0
  7. data/ext/eigen/eigen3/Eigen/Array +11 -0
  8. data/ext/eigen/eigen3/Eigen/Cholesky +32 -0
  9. data/ext/eigen/eigen3/Eigen/CholmodSupport +45 -0
  10. data/ext/eigen/eigen3/Eigen/Core +376 -0
  11. data/ext/eigen/eigen3/Eigen/Dense +7 -0
  12. data/ext/eigen/eigen3/Eigen/Eigen +2 -0
  13. data/ext/eigen/eigen3/Eigen/Eigen2Support +95 -0
  14. data/ext/eigen/eigen3/Eigen/Eigenvalues +48 -0
  15. data/ext/eigen/eigen3/Eigen/Geometry +63 -0
  16. data/ext/eigen/eigen3/Eigen/Householder +23 -0
  17. data/ext/eigen/eigen3/Eigen/IterativeLinearSolvers +40 -0
  18. data/ext/eigen/eigen3/Eigen/Jacobi +26 -0
  19. data/ext/eigen/eigen3/Eigen/LU +41 -0
  20. data/ext/eigen/eigen3/Eigen/LeastSquares +32 -0
  21. data/ext/eigen/eigen3/Eigen/MetisSupport +28 -0
  22. data/ext/eigen/eigen3/Eigen/PaStiXSupport +46 -0
  23. data/ext/eigen/eigen3/Eigen/PardisoSupport +30 -0
  24. data/ext/eigen/eigen3/Eigen/QR +45 -0
  25. data/ext/eigen/eigen3/Eigen/QtAlignedMalloc +34 -0
  26. data/ext/eigen/eigen3/Eigen/SPQRSupport +29 -0
  27. data/ext/eigen/eigen3/Eigen/SVD +37 -0
  28. data/ext/eigen/eigen3/Eigen/Sparse +27 -0
  29. data/ext/eigen/eigen3/Eigen/SparseCore +64 -0
  30. data/ext/eigen/eigen3/Eigen/SparseLU +49 -0
  31. data/ext/eigen/eigen3/Eigen/SparseQR +33 -0
  32. data/ext/eigen/eigen3/Eigen/StdDeque +27 -0
  33. data/ext/eigen/eigen3/Eigen/StdList +26 -0
  34. data/ext/eigen/eigen3/Eigen/StdVector +27 -0
  35. data/ext/eigen/eigen3/Eigen/SuperLUSupport +59 -0
  36. data/ext/eigen/eigen3/Eigen/UmfPackSupport +36 -0
  37. data/ext/eigen/eigen3/Eigen/src/Cholesky/LDLT.h +611 -0
  38. data/ext/eigen/eigen3/Eigen/src/Cholesky/LLT.h +498 -0
  39. data/ext/eigen/eigen3/Eigen/src/Cholesky/LLT_MKL.h +102 -0
  40. data/ext/eigen/eigen3/Eigen/src/CholmodSupport/CholmodSupport.h +607 -0
  41. data/ext/eigen/eigen3/Eigen/src/Core/Array.h +323 -0
  42. data/ext/eigen/eigen3/Eigen/src/Core/ArrayBase.h +226 -0
  43. data/ext/eigen/eigen3/Eigen/src/Core/ArrayWrapper.h +264 -0
  44. data/ext/eigen/eigen3/Eigen/src/Core/Assign.h +590 -0
  45. data/ext/eigen/eigen3/Eigen/src/Core/Assign_MKL.h +224 -0
  46. data/ext/eigen/eigen3/Eigen/src/Core/BandMatrix.h +334 -0
  47. data/ext/eigen/eigen3/Eigen/src/Core/Block.h +406 -0
  48. data/ext/eigen/eigen3/Eigen/src/Core/BooleanRedux.h +154 -0
  49. data/ext/eigen/eigen3/Eigen/src/Core/CommaInitializer.h +154 -0
  50. data/ext/eigen/eigen3/Eigen/src/Core/CoreIterators.h +61 -0
  51. data/ext/eigen/eigen3/Eigen/src/Core/CwiseBinaryOp.h +230 -0
  52. data/ext/eigen/eigen3/Eigen/src/Core/CwiseNullaryOp.h +864 -0
  53. data/ext/eigen/eigen3/Eigen/src/Core/CwiseUnaryOp.h +126 -0
  54. data/ext/eigen/eigen3/Eigen/src/Core/CwiseUnaryView.h +139 -0
  55. data/ext/eigen/eigen3/Eigen/src/Core/DenseBase.h +521 -0
  56. data/ext/eigen/eigen3/Eigen/src/Core/DenseCoeffsBase.h +754 -0
  57. data/ext/eigen/eigen3/Eigen/src/Core/DenseStorage.h +434 -0
  58. data/ext/eigen/eigen3/Eigen/src/Core/Diagonal.h +237 -0
  59. data/ext/eigen/eigen3/Eigen/src/Core/DiagonalMatrix.h +313 -0
  60. data/ext/eigen/eigen3/Eigen/src/Core/DiagonalProduct.h +131 -0
  61. data/ext/eigen/eigen3/Eigen/src/Core/Dot.h +263 -0
  62. data/ext/eigen/eigen3/Eigen/src/Core/EigenBase.h +131 -0
  63. data/ext/eigen/eigen3/Eigen/src/Core/Flagged.h +140 -0
  64. data/ext/eigen/eigen3/Eigen/src/Core/ForceAlignedAccess.h +146 -0
  65. data/ext/eigen/eigen3/Eigen/src/Core/Functors.h +1026 -0
  66. data/ext/eigen/eigen3/Eigen/src/Core/Fuzzy.h +150 -0
  67. data/ext/eigen/eigen3/Eigen/src/Core/GeneralProduct.h +635 -0
  68. data/ext/eigen/eigen3/Eigen/src/Core/GenericPacketMath.h +350 -0
  69. data/ext/eigen/eigen3/Eigen/src/Core/GlobalFunctions.h +92 -0
  70. data/ext/eigen/eigen3/Eigen/src/Core/IO.h +250 -0
  71. data/ext/eigen/eigen3/Eigen/src/Core/Map.h +192 -0
  72. data/ext/eigen/eigen3/Eigen/src/Core/MapBase.h +247 -0
  73. data/ext/eigen/eigen3/Eigen/src/Core/MathFunctions.h +768 -0
  74. data/ext/eigen/eigen3/Eigen/src/Core/Matrix.h +420 -0
  75. data/ext/eigen/eigen3/Eigen/src/Core/MatrixBase.h +563 -0
  76. data/ext/eigen/eigen3/Eigen/src/Core/NestByValue.h +111 -0
  77. data/ext/eigen/eigen3/Eigen/src/Core/NoAlias.h +134 -0
  78. data/ext/eigen/eigen3/Eigen/src/Core/NumTraits.h +150 -0
  79. data/ext/eigen/eigen3/Eigen/src/Core/PermutationMatrix.h +721 -0
  80. data/ext/eigen/eigen3/Eigen/src/Core/PlainObjectBase.h +822 -0
  81. data/ext/eigen/eigen3/Eigen/src/Core/ProductBase.h +290 -0
  82. data/ext/eigen/eigen3/Eigen/src/Core/Random.h +152 -0
  83. data/ext/eigen/eigen3/Eigen/src/Core/Redux.h +409 -0
  84. data/ext/eigen/eigen3/Eigen/src/Core/Ref.h +278 -0
  85. data/ext/eigen/eigen3/Eigen/src/Core/Replicate.h +177 -0
  86. data/ext/eigen/eigen3/Eigen/src/Core/ReturnByValue.h +99 -0
  87. data/ext/eigen/eigen3/Eigen/src/Core/Reverse.h +224 -0
  88. data/ext/eigen/eigen3/Eigen/src/Core/Select.h +162 -0
  89. data/ext/eigen/eigen3/Eigen/src/Core/SelfAdjointView.h +314 -0
  90. data/ext/eigen/eigen3/Eigen/src/Core/SelfCwiseBinaryOp.h +191 -0
  91. data/ext/eigen/eigen3/Eigen/src/Core/SolveTriangular.h +260 -0
  92. data/ext/eigen/eigen3/Eigen/src/Core/StableNorm.h +203 -0
  93. data/ext/eigen/eigen3/Eigen/src/Core/Stride.h +108 -0
  94. data/ext/eigen/eigen3/Eigen/src/Core/Swap.h +126 -0
  95. data/ext/eigen/eigen3/Eigen/src/Core/Transpose.h +419 -0
  96. data/ext/eigen/eigen3/Eigen/src/Core/Transpositions.h +436 -0
  97. data/ext/eigen/eigen3/Eigen/src/Core/TriangularMatrix.h +839 -0
  98. data/ext/eigen/eigen3/Eigen/src/Core/VectorBlock.h +95 -0
  99. data/ext/eigen/eigen3/Eigen/src/Core/VectorwiseOp.h +642 -0
  100. data/ext/eigen/eigen3/Eigen/src/Core/Visitor.h +237 -0
  101. data/ext/eigen/eigen3/Eigen/src/Core/arch/AltiVec/Complex.h +217 -0
  102. data/ext/eigen/eigen3/Eigen/src/Core/arch/AltiVec/PacketMath.h +501 -0
  103. data/ext/eigen/eigen3/Eigen/src/Core/arch/Default/Settings.h +49 -0
  104. data/ext/eigen/eigen3/Eigen/src/Core/arch/NEON/Complex.h +253 -0
  105. data/ext/eigen/eigen3/Eigen/src/Core/arch/NEON/PacketMath.h +420 -0
  106. data/ext/eigen/eigen3/Eigen/src/Core/arch/SSE/Complex.h +442 -0
  107. data/ext/eigen/eigen3/Eigen/src/Core/arch/SSE/MathFunctions.h +475 -0
  108. data/ext/eigen/eigen3/Eigen/src/Core/arch/SSE/PacketMath.h +649 -0
  109. data/ext/eigen/eigen3/Eigen/src/Core/products/CoeffBasedProduct.h +476 -0
  110. data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1341 -0
  111. data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix.h +427 -0
  112. data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +278 -0
  113. data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_MKL.h +146 -0
  114. data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix_MKL.h +118 -0
  115. data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixVector.h +566 -0
  116. data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixVector_MKL.h +131 -0
  117. data/ext/eigen/eigen3/Eigen/src/Core/products/Parallelizer.h +162 -0
  118. data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +436 -0
  119. data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix_MKL.h +295 -0
  120. data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector.h +281 -0
  121. data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector_MKL.h +114 -0
  122. data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointProduct.h +123 -0
  123. data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointRank2Update.h +93 -0
  124. data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix.h +427 -0
  125. data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix_MKL.h +309 -0
  126. data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularMatrixVector.h +348 -0
  127. data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularMatrixVector_MKL.h +247 -0
  128. data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularSolverMatrix.h +332 -0
  129. data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularSolverMatrix_MKL.h +155 -0
  130. data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularSolverVector.h +139 -0
  131. data/ext/eigen/eigen3/Eigen/src/Core/util/BlasUtil.h +264 -0
  132. data/ext/eigen/eigen3/Eigen/src/Core/util/Constants.h +451 -0
  133. data/ext/eigen/eigen3/Eigen/src/Core/util/DisableStupidWarnings.h +40 -0
  134. data/ext/eigen/eigen3/Eigen/src/Core/util/ForwardDeclarations.h +302 -0
  135. data/ext/eigen/eigen3/Eigen/src/Core/util/MKL_support.h +158 -0
  136. data/ext/eigen/eigen3/Eigen/src/Core/util/Macros.h +451 -0
  137. data/ext/eigen/eigen3/Eigen/src/Core/util/Memory.h +977 -0
  138. data/ext/eigen/eigen3/Eigen/src/Core/util/Meta.h +243 -0
  139. data/ext/eigen/eigen3/Eigen/src/Core/util/NonMPL2.h +3 -0
  140. data/ext/eigen/eigen3/Eigen/src/Core/util/ReenableStupidWarnings.h +14 -0
  141. data/ext/eigen/eigen3/Eigen/src/Core/util/StaticAssert.h +208 -0
  142. data/ext/eigen/eigen3/Eigen/src/Core/util/XprHelper.h +469 -0
  143. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Block.h +126 -0
  144. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Cwise.h +192 -0
  145. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/CwiseOperators.h +298 -0
  146. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/AlignedBox.h +159 -0
  147. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/All.h +115 -0
  148. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/AngleAxis.h +214 -0
  149. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Hyperplane.h +254 -0
  150. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/ParametrizedLine.h +141 -0
  151. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Quaternion.h +495 -0
  152. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Rotation2D.h +145 -0
  153. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/RotationBase.h +123 -0
  154. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Scaling.h +167 -0
  155. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Transform.h +786 -0
  156. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Translation.h +184 -0
  157. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/LU.h +120 -0
  158. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Lazy.h +71 -0
  159. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/LeastSquares.h +169 -0
  160. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Macros.h +20 -0
  161. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/MathFunctions.h +57 -0
  162. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Memory.h +45 -0
  163. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Meta.h +75 -0
  164. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Minor.h +117 -0
  165. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/QR.h +67 -0
  166. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/SVD.h +637 -0
  167. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/TriangularSolver.h +42 -0
  168. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/VectorBlock.h +94 -0
  169. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/ComplexEigenSolver.h +341 -0
  170. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/ComplexSchur.h +456 -0
  171. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/ComplexSchur_MKL.h +94 -0
  172. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/EigenSolver.h +607 -0
  173. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +350 -0
  174. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +227 -0
  175. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/HessenbergDecomposition.h +373 -0
  176. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +160 -0
  177. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/RealQZ.h +624 -0
  178. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/RealSchur.h +525 -0
  179. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/RealSchur_MKL.h +83 -0
  180. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +801 -0
  181. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_MKL.h +92 -0
  182. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/Tridiagonalization.h +557 -0
  183. data/ext/eigen/eigen3/Eigen/src/Geometry/AlignedBox.h +392 -0
  184. data/ext/eigen/eigen3/Eigen/src/Geometry/AngleAxis.h +233 -0
  185. data/ext/eigen/eigen3/Eigen/src/Geometry/EulerAngles.h +104 -0
  186. data/ext/eigen/eigen3/Eigen/src/Geometry/Homogeneous.h +307 -0
  187. data/ext/eigen/eigen3/Eigen/src/Geometry/Hyperplane.h +280 -0
  188. data/ext/eigen/eigen3/Eigen/src/Geometry/OrthoMethods.h +218 -0
  189. data/ext/eigen/eigen3/Eigen/src/Geometry/ParametrizedLine.h +195 -0
  190. data/ext/eigen/eigen3/Eigen/src/Geometry/Quaternion.h +776 -0
  191. data/ext/eigen/eigen3/Eigen/src/Geometry/Rotation2D.h +160 -0
  192. data/ext/eigen/eigen3/Eigen/src/Geometry/RotationBase.h +206 -0
  193. data/ext/eigen/eigen3/Eigen/src/Geometry/Scaling.h +166 -0
  194. data/ext/eigen/eigen3/Eigen/src/Geometry/Transform.h +1455 -0
  195. data/ext/eigen/eigen3/Eigen/src/Geometry/Translation.h +206 -0
  196. data/ext/eigen/eigen3/Eigen/src/Geometry/Umeyama.h +177 -0
  197. data/ext/eigen/eigen3/Eigen/src/Geometry/arch/Geometry_SSE.h +115 -0
  198. data/ext/eigen/eigen3/Eigen/src/Householder/BlockHouseholder.h +68 -0
  199. data/ext/eigen/eigen3/Eigen/src/Householder/Householder.h +171 -0
  200. data/ext/eigen/eigen3/Eigen/src/Householder/HouseholderSequence.h +441 -0
  201. data/ext/eigen/eigen3/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +149 -0
  202. data/ext/eigen/eigen3/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +263 -0
  203. data/ext/eigen/eigen3/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +256 -0
  204. data/ext/eigen/eigen3/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +282 -0
  205. data/ext/eigen/eigen3/Eigen/src/Jacobi/Jacobi.h +433 -0
  206. data/ext/eigen/eigen3/Eigen/src/LU/Determinant.h +101 -0
  207. data/ext/eigen/eigen3/Eigen/src/LU/FullPivLU.h +751 -0
  208. data/ext/eigen/eigen3/Eigen/src/LU/Inverse.h +400 -0
  209. data/ext/eigen/eigen3/Eigen/src/LU/PartialPivLU.h +509 -0
  210. data/ext/eigen/eigen3/Eigen/src/LU/PartialPivLU_MKL.h +85 -0
  211. data/ext/eigen/eigen3/Eigen/src/LU/arch/Inverse_SSE.h +329 -0
  212. data/ext/eigen/eigen3/Eigen/src/MetisSupport/MetisSupport.h +137 -0
  213. data/ext/eigen/eigen3/Eigen/src/OrderingMethods/Amd.h +444 -0
  214. data/ext/eigen/eigen3/Eigen/src/OrderingMethods/Eigen_Colamd.h +1850 -0
  215. data/ext/eigen/eigen3/Eigen/src/PaStiXSupport/PaStiXSupport.h +721 -0
  216. data/ext/eigen/eigen3/Eigen/src/PardisoSupport/PardisoSupport.h +592 -0
  217. data/ext/eigen/eigen3/Eigen/src/QR/ColPivHouseholderQR.h +580 -0
  218. data/ext/eigen/eigen3/Eigen/src/QR/ColPivHouseholderQR_MKL.h +99 -0
  219. data/ext/eigen/eigen3/Eigen/src/QR/FullPivHouseholderQR.h +622 -0
  220. data/ext/eigen/eigen3/Eigen/src/QR/HouseholderQR.h +388 -0
  221. data/ext/eigen/eigen3/Eigen/src/QR/HouseholderQR_MKL.h +71 -0
  222. data/ext/eigen/eigen3/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +338 -0
  223. data/ext/eigen/eigen3/Eigen/src/SVD/JacobiSVD.h +976 -0
  224. data/ext/eigen/eigen3/Eigen/src/SVD/JacobiSVD_MKL.h +92 -0
  225. data/ext/eigen/eigen3/Eigen/src/SVD/UpperBidiagonalization.h +148 -0
  226. data/ext/eigen/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky.h +671 -0
  227. data/ext/eigen/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +199 -0
  228. data/ext/eigen/eigen3/Eigen/src/SparseCore/AmbiVector.h +373 -0
  229. data/ext/eigen/eigen3/Eigen/src/SparseCore/CompressedStorage.h +233 -0
  230. data/ext/eigen/eigen3/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +245 -0
  231. data/ext/eigen/eigen3/Eigen/src/SparseCore/MappedSparseMatrix.h +181 -0
  232. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseBlock.h +537 -0
  233. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseColEtree.h +206 -0
  234. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +325 -0
  235. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +163 -0
  236. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseDenseProduct.h +311 -0
  237. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseDiagonalProduct.h +196 -0
  238. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseDot.h +101 -0
  239. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseFuzzy.h +26 -0
  240. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseMatrix.h +1262 -0
  241. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseMatrixBase.h +461 -0
  242. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparsePermutation.h +148 -0
  243. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseProduct.h +188 -0
  244. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseRedux.h +45 -0
  245. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseSelfAdjointView.h +507 -0
  246. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +150 -0
  247. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseTranspose.h +63 -0
  248. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseTriangularView.h +179 -0
  249. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseUtil.h +172 -0
  250. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseVector.h +448 -0
  251. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseView.h +99 -0
  252. data/ext/eigen/eigen3/Eigen/src/SparseCore/TriangularSolver.h +334 -0
  253. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU.h +806 -0
  254. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLUImpl.h +66 -0
  255. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_Memory.h +227 -0
  256. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_Structs.h +111 -0
  257. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +298 -0
  258. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_Utils.h +80 -0
  259. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_column_bmod.h +180 -0
  260. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_column_dfs.h +177 -0
  261. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +106 -0
  262. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +279 -0
  263. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +127 -0
  264. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +130 -0
  265. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_panel_bmod.h +223 -0
  266. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_panel_dfs.h +258 -0
  267. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_pivotL.h +137 -0
  268. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_pruneL.h +135 -0
  269. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_relax_snode.h +83 -0
  270. data/ext/eigen/eigen3/Eigen/src/SparseQR/SparseQR.h +714 -0
  271. data/ext/eigen/eigen3/Eigen/src/StlSupport/StdDeque.h +134 -0
  272. data/ext/eigen/eigen3/Eigen/src/StlSupport/StdList.h +114 -0
  273. data/ext/eigen/eigen3/Eigen/src/StlSupport/StdVector.h +126 -0
  274. data/ext/eigen/eigen3/Eigen/src/StlSupport/details.h +84 -0
  275. data/ext/eigen/eigen3/Eigen/src/SuperLUSupport/SuperLUSupport.h +1026 -0
  276. data/ext/eigen/eigen3/Eigen/src/UmfPackSupport/UmfPackSupport.h +474 -0
  277. data/ext/eigen/eigen3/Eigen/src/misc/Image.h +84 -0
  278. data/ext/eigen/eigen3/Eigen/src/misc/Kernel.h +81 -0
  279. data/ext/eigen/eigen3/Eigen/src/misc/Solve.h +76 -0
  280. data/ext/eigen/eigen3/Eigen/src/misc/SparseSolve.h +128 -0
  281. data/ext/eigen/eigen3/Eigen/src/misc/blas.h +658 -0
  282. data/ext/eigen/eigen3/Eigen/src/plugins/ArrayCwiseBinaryOps.h +253 -0
  283. data/ext/eigen/eigen3/Eigen/src/plugins/ArrayCwiseUnaryOps.h +187 -0
  284. data/ext/eigen/eigen3/Eigen/src/plugins/BlockMethods.h +935 -0
  285. data/ext/eigen/eigen3/Eigen/src/plugins/CommonCwiseBinaryOps.h +46 -0
  286. data/ext/eigen/eigen3/Eigen/src/plugins/CommonCwiseUnaryOps.h +172 -0
  287. data/ext/eigen/eigen3/Eigen/src/plugins/MatrixCwiseBinaryOps.h +143 -0
  288. data/ext/eigen/eigen3/Eigen/src/plugins/MatrixCwiseUnaryOps.h +52 -0
  289. data/ext/eigen/eigen3/signature_of_eigen3_matrix_library +1 -0
  290. data/ext/eigen/eigen_wrap.cxx +19420 -10396
  291. data/ext/eigen/extconf.rb +37 -2
  292. data/lib/eigen.rb +146 -3
  293. metadata +294 -7
@@ -0,0 +1,159 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2008 Gael Guennebaud <g.gael@free.fr>
5
+ //
6
+ // This Source Code Form is subject to the terms of the Mozilla
7
+ // Public License v. 2.0. If a copy of the MPL was not distributed
8
+ // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
9
+
10
+ // no include guard, we'll include this twice from All.h from Eigen2Support, and it's internal anyway
11
+
12
+ namespace Eigen {
13
+
14
+ /** \geometry_module \ingroup Geometry_Module
15
+ * \nonstableyet
16
+ *
17
+ * \class AlignedBox
18
+ *
19
+ * \brief An axis aligned box
20
+ *
21
+ * \param _Scalar the type of the scalar coefficients
22
+ * \param _AmbientDim the dimension of the ambient space, can be a compile time value or Dynamic.
23
+ *
24
+ * This class represents an axis aligned box as a pair of the minimal and maximal corners.
25
+ */
26
+ template <typename _Scalar, int _AmbientDim>
27
+ class AlignedBox
28
+ {
29
+ public:
30
+ EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF_VECTORIZABLE_FIXED_SIZE(_Scalar,_AmbientDim==Dynamic ? Dynamic : _AmbientDim+1)
31
+ enum { AmbientDimAtCompileTime = _AmbientDim };
32
+ typedef _Scalar Scalar;
33
+ typedef typename NumTraits<Scalar>::Real RealScalar;
34
+ typedef Matrix<Scalar,AmbientDimAtCompileTime,1> VectorType;
35
+
36
+ /** Default constructor initializing a null box. */
37
+ inline AlignedBox()
38
+ { if (AmbientDimAtCompileTime!=Dynamic) setNull(); }
39
+
40
+ /** Constructs a null box with \a _dim the dimension of the ambient space. */
41
+ inline explicit AlignedBox(int _dim) : m_min(_dim), m_max(_dim)
42
+ { setNull(); }
43
+
44
+ /** Constructs a box with extremities \a _min and \a _max. */
45
+ inline AlignedBox(const VectorType& _min, const VectorType& _max) : m_min(_min), m_max(_max) {}
46
+
47
+ /** Constructs a box containing a single point \a p. */
48
+ inline explicit AlignedBox(const VectorType& p) : m_min(p), m_max(p) {}
49
+
50
+ ~AlignedBox() {}
51
+
52
+ /** \returns the dimension in which the box holds */
53
+ inline int dim() const { return AmbientDimAtCompileTime==Dynamic ? m_min.size()-1 : AmbientDimAtCompileTime; }
54
+
55
+ /** \returns true if the box is null, i.e, empty. */
56
+ inline bool isNull() const { return (m_min.cwise() > m_max).any(); }
57
+
58
+ /** Makes \c *this a null/empty box. */
59
+ inline void setNull()
60
+ {
61
+ m_min.setConstant( (std::numeric_limits<Scalar>::max)());
62
+ m_max.setConstant(-(std::numeric_limits<Scalar>::max)());
63
+ }
64
+
65
+ /** \returns the minimal corner */
66
+ inline const VectorType& (min)() const { return m_min; }
67
+ /** \returns a non const reference to the minimal corner */
68
+ inline VectorType& (min)() { return m_min; }
69
+ /** \returns the maximal corner */
70
+ inline const VectorType& (max)() const { return m_max; }
71
+ /** \returns a non const reference to the maximal corner */
72
+ inline VectorType& (max)() { return m_max; }
73
+
74
+ /** \returns true if the point \a p is inside the box \c *this. */
75
+ inline bool contains(const VectorType& p) const
76
+ { return (m_min.cwise()<=p).all() && (p.cwise()<=m_max).all(); }
77
+
78
+ /** \returns true if the box \a b is entirely inside the box \c *this. */
79
+ inline bool contains(const AlignedBox& b) const
80
+ { return (m_min.cwise()<=(b.min)()).all() && ((b.max)().cwise()<=m_max).all(); }
81
+
82
+ /** Extends \c *this such that it contains the point \a p and returns a reference to \c *this. */
83
+ inline AlignedBox& extend(const VectorType& p)
84
+ { m_min = (m_min.cwise().min)(p); m_max = (m_max.cwise().max)(p); return *this; }
85
+
86
+ /** Extends \c *this such that it contains the box \a b and returns a reference to \c *this. */
87
+ inline AlignedBox& extend(const AlignedBox& b)
88
+ { m_min = (m_min.cwise().min)(b.m_min); m_max = (m_max.cwise().max)(b.m_max); return *this; }
89
+
90
+ /** Clamps \c *this by the box \a b and returns a reference to \c *this. */
91
+ inline AlignedBox& clamp(const AlignedBox& b)
92
+ { m_min = (m_min.cwise().max)(b.m_min); m_max = (m_max.cwise().min)(b.m_max); return *this; }
93
+
94
+ /** Translate \c *this by the vector \a t and returns a reference to \c *this. */
95
+ inline AlignedBox& translate(const VectorType& t)
96
+ { m_min += t; m_max += t; return *this; }
97
+
98
+ /** \returns the squared distance between the point \a p and the box \c *this,
99
+ * and zero if \a p is inside the box.
100
+ * \sa exteriorDistance()
101
+ */
102
+ inline Scalar squaredExteriorDistance(const VectorType& p) const;
103
+
104
+ /** \returns the distance between the point \a p and the box \c *this,
105
+ * and zero if \a p is inside the box.
106
+ * \sa squaredExteriorDistance()
107
+ */
108
+ inline Scalar exteriorDistance(const VectorType& p) const
109
+ { return ei_sqrt(squaredExteriorDistance(p)); }
110
+
111
+ /** \returns \c *this with scalar type casted to \a NewScalarType
112
+ *
113
+ * Note that if \a NewScalarType is equal to the current scalar type of \c *this
114
+ * then this function smartly returns a const reference to \c *this.
115
+ */
116
+ template<typename NewScalarType>
117
+ inline typename internal::cast_return_type<AlignedBox,
118
+ AlignedBox<NewScalarType,AmbientDimAtCompileTime> >::type cast() const
119
+ {
120
+ return typename internal::cast_return_type<AlignedBox,
121
+ AlignedBox<NewScalarType,AmbientDimAtCompileTime> >::type(*this);
122
+ }
123
+
124
+ /** Copy constructor with scalar type conversion */
125
+ template<typename OtherScalarType>
126
+ inline explicit AlignedBox(const AlignedBox<OtherScalarType,AmbientDimAtCompileTime>& other)
127
+ {
128
+ m_min = (other.min)().template cast<Scalar>();
129
+ m_max = (other.max)().template cast<Scalar>();
130
+ }
131
+
132
+ /** \returns \c true if \c *this is approximately equal to \a other, within the precision
133
+ * determined by \a prec.
134
+ *
135
+ * \sa MatrixBase::isApprox() */
136
+ bool isApprox(const AlignedBox& other, typename NumTraits<Scalar>::Real prec = precision<Scalar>()) const
137
+ { return m_min.isApprox(other.m_min, prec) && m_max.isApprox(other.m_max, prec); }
138
+
139
+ protected:
140
+
141
+ VectorType m_min, m_max;
142
+ };
143
+
144
+ template<typename Scalar,int AmbiantDim>
145
+ inline Scalar AlignedBox<Scalar,AmbiantDim>::squaredExteriorDistance(const VectorType& p) const
146
+ {
147
+ Scalar dist2(0);
148
+ Scalar aux;
149
+ for (int k=0; k<dim(); ++k)
150
+ {
151
+ if ((aux = (p[k]-m_min[k]))<Scalar(0))
152
+ dist2 += aux*aux;
153
+ else if ( (aux = (m_max[k]-p[k]))<Scalar(0))
154
+ dist2 += aux*aux;
155
+ }
156
+ return dist2;
157
+ }
158
+
159
+ } // end namespace Eigen
@@ -0,0 +1,115 @@
1
+ #ifndef EIGEN2_GEOMETRY_MODULE_H
2
+ #define EIGEN2_GEOMETRY_MODULE_H
3
+
4
+ #include <limits>
5
+
6
+ #ifndef M_PI
7
+ #define M_PI 3.14159265358979323846
8
+ #endif
9
+
10
+ #if EIGEN2_SUPPORT_STAGE < STAGE20_RESOLVE_API_CONFLICTS
11
+ #include "RotationBase.h"
12
+ #include "Rotation2D.h"
13
+ #include "Quaternion.h"
14
+ #include "AngleAxis.h"
15
+ #include "Transform.h"
16
+ #include "Translation.h"
17
+ #include "Scaling.h"
18
+ #include "AlignedBox.h"
19
+ #include "Hyperplane.h"
20
+ #include "ParametrizedLine.h"
21
+ #endif
22
+
23
+
24
+ #define RotationBase eigen2_RotationBase
25
+ #define Rotation2D eigen2_Rotation2D
26
+ #define Rotation2Df eigen2_Rotation2Df
27
+ #define Rotation2Dd eigen2_Rotation2Dd
28
+
29
+ #define Quaternion eigen2_Quaternion
30
+ #define Quaternionf eigen2_Quaternionf
31
+ #define Quaterniond eigen2_Quaterniond
32
+
33
+ #define AngleAxis eigen2_AngleAxis
34
+ #define AngleAxisf eigen2_AngleAxisf
35
+ #define AngleAxisd eigen2_AngleAxisd
36
+
37
+ #define Transform eigen2_Transform
38
+ #define Transform2f eigen2_Transform2f
39
+ #define Transform2d eigen2_Transform2d
40
+ #define Transform3f eigen2_Transform3f
41
+ #define Transform3d eigen2_Transform3d
42
+
43
+ #define Translation eigen2_Translation
44
+ #define Translation2f eigen2_Translation2f
45
+ #define Translation2d eigen2_Translation2d
46
+ #define Translation3f eigen2_Translation3f
47
+ #define Translation3d eigen2_Translation3d
48
+
49
+ #define Scaling eigen2_Scaling
50
+ #define Scaling2f eigen2_Scaling2f
51
+ #define Scaling2d eigen2_Scaling2d
52
+ #define Scaling3f eigen2_Scaling3f
53
+ #define Scaling3d eigen2_Scaling3d
54
+
55
+ #define AlignedBox eigen2_AlignedBox
56
+
57
+ #define Hyperplane eigen2_Hyperplane
58
+ #define ParametrizedLine eigen2_ParametrizedLine
59
+
60
+ #define ei_toRotationMatrix eigen2_ei_toRotationMatrix
61
+ #define ei_quaternion_assign_impl eigen2_ei_quaternion_assign_impl
62
+ #define ei_transform_product_impl eigen2_ei_transform_product_impl
63
+
64
+ #include "RotationBase.h"
65
+ #include "Rotation2D.h"
66
+ #include "Quaternion.h"
67
+ #include "AngleAxis.h"
68
+ #include "Transform.h"
69
+ #include "Translation.h"
70
+ #include "Scaling.h"
71
+ #include "AlignedBox.h"
72
+ #include "Hyperplane.h"
73
+ #include "ParametrizedLine.h"
74
+
75
+ #undef ei_toRotationMatrix
76
+ #undef ei_quaternion_assign_impl
77
+ #undef ei_transform_product_impl
78
+
79
+ #undef RotationBase
80
+ #undef Rotation2D
81
+ #undef Rotation2Df
82
+ #undef Rotation2Dd
83
+
84
+ #undef Quaternion
85
+ #undef Quaternionf
86
+ #undef Quaterniond
87
+
88
+ #undef AngleAxis
89
+ #undef AngleAxisf
90
+ #undef AngleAxisd
91
+
92
+ #undef Transform
93
+ #undef Transform2f
94
+ #undef Transform2d
95
+ #undef Transform3f
96
+ #undef Transform3d
97
+
98
+ #undef Translation
99
+ #undef Translation2f
100
+ #undef Translation2d
101
+ #undef Translation3f
102
+ #undef Translation3d
103
+
104
+ #undef Scaling
105
+ #undef Scaling2f
106
+ #undef Scaling2d
107
+ #undef Scaling3f
108
+ #undef Scaling3d
109
+
110
+ #undef AlignedBox
111
+
112
+ #undef Hyperplane
113
+ #undef ParametrizedLine
114
+
115
+ #endif // EIGEN2_GEOMETRY_MODULE_H
@@ -0,0 +1,214 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2008 Gael Guennebaud <g.gael@free.fr>
5
+ //
6
+ // This Source Code Form is subject to the terms of the Mozilla
7
+ // Public License v. 2.0. If a copy of the MPL was not distributed
8
+ // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
9
+
10
+ // no include guard, we'll include this twice from All.h from Eigen2Support, and it's internal anyway
11
+
12
+ namespace Eigen {
13
+
14
+ /** \geometry_module \ingroup Geometry_Module
15
+ *
16
+ * \class AngleAxis
17
+ *
18
+ * \brief Represents a 3D rotation as a rotation angle around an arbitrary 3D axis
19
+ *
20
+ * \param _Scalar the scalar type, i.e., the type of the coefficients.
21
+ *
22
+ * The following two typedefs are provided for convenience:
23
+ * \li \c AngleAxisf for \c float
24
+ * \li \c AngleAxisd for \c double
25
+ *
26
+ * \addexample AngleAxisForEuler \label How to define a rotation from Euler-angles
27
+ *
28
+ * Combined with MatrixBase::Unit{X,Y,Z}, AngleAxis can be used to easily
29
+ * mimic Euler-angles. Here is an example:
30
+ * \include AngleAxis_mimic_euler.cpp
31
+ * Output: \verbinclude AngleAxis_mimic_euler.out
32
+ *
33
+ * \note This class is not aimed to be used to store a rotation transformation,
34
+ * but rather to make easier the creation of other rotation (Quaternion, rotation Matrix)
35
+ * and transformation objects.
36
+ *
37
+ * \sa class Quaternion, class Transform, MatrixBase::UnitX()
38
+ */
39
+
40
+ template<typename _Scalar> struct ei_traits<AngleAxis<_Scalar> >
41
+ {
42
+ typedef _Scalar Scalar;
43
+ };
44
+
45
+ template<typename _Scalar>
46
+ class AngleAxis : public RotationBase<AngleAxis<_Scalar>,3>
47
+ {
48
+ typedef RotationBase<AngleAxis<_Scalar>,3> Base;
49
+
50
+ public:
51
+
52
+ using Base::operator*;
53
+
54
+ enum { Dim = 3 };
55
+ /** the scalar type of the coefficients */
56
+ typedef _Scalar Scalar;
57
+ typedef Matrix<Scalar,3,3> Matrix3;
58
+ typedef Matrix<Scalar,3,1> Vector3;
59
+ typedef Quaternion<Scalar> QuaternionType;
60
+
61
+ protected:
62
+
63
+ Vector3 m_axis;
64
+ Scalar m_angle;
65
+
66
+ public:
67
+
68
+ /** Default constructor without initialization. */
69
+ AngleAxis() {}
70
+ /** Constructs and initialize the angle-axis rotation from an \a angle in radian
71
+ * and an \a axis which must be normalized. */
72
+ template<typename Derived>
73
+ inline AngleAxis(Scalar angle, const MatrixBase<Derived>& axis) : m_axis(axis), m_angle(angle) {}
74
+ /** Constructs and initialize the angle-axis rotation from a quaternion \a q. */
75
+ inline AngleAxis(const QuaternionType& q) { *this = q; }
76
+ /** Constructs and initialize the angle-axis rotation from a 3x3 rotation matrix. */
77
+ template<typename Derived>
78
+ inline explicit AngleAxis(const MatrixBase<Derived>& m) { *this = m; }
79
+
80
+ Scalar angle() const { return m_angle; }
81
+ Scalar& angle() { return m_angle; }
82
+
83
+ const Vector3& axis() const { return m_axis; }
84
+ Vector3& axis() { return m_axis; }
85
+
86
+ /** Concatenates two rotations */
87
+ inline QuaternionType operator* (const AngleAxis& other) const
88
+ { return QuaternionType(*this) * QuaternionType(other); }
89
+
90
+ /** Concatenates two rotations */
91
+ inline QuaternionType operator* (const QuaternionType& other) const
92
+ { return QuaternionType(*this) * other; }
93
+
94
+ /** Concatenates two rotations */
95
+ friend inline QuaternionType operator* (const QuaternionType& a, const AngleAxis& b)
96
+ { return a * QuaternionType(b); }
97
+
98
+ /** Concatenates two rotations */
99
+ inline Matrix3 operator* (const Matrix3& other) const
100
+ { return toRotationMatrix() * other; }
101
+
102
+ /** Concatenates two rotations */
103
+ inline friend Matrix3 operator* (const Matrix3& a, const AngleAxis& b)
104
+ { return a * b.toRotationMatrix(); }
105
+
106
+ /** Applies rotation to vector */
107
+ inline Vector3 operator* (const Vector3& other) const
108
+ { return toRotationMatrix() * other; }
109
+
110
+ /** \returns the inverse rotation, i.e., an angle-axis with opposite rotation angle */
111
+ AngleAxis inverse() const
112
+ { return AngleAxis(-m_angle, m_axis); }
113
+
114
+ AngleAxis& operator=(const QuaternionType& q);
115
+ template<typename Derived>
116
+ AngleAxis& operator=(const MatrixBase<Derived>& m);
117
+
118
+ template<typename Derived>
119
+ AngleAxis& fromRotationMatrix(const MatrixBase<Derived>& m);
120
+ Matrix3 toRotationMatrix(void) const;
121
+
122
+ /** \returns \c *this with scalar type casted to \a NewScalarType
123
+ *
124
+ * Note that if \a NewScalarType is equal to the current scalar type of \c *this
125
+ * then this function smartly returns a const reference to \c *this.
126
+ */
127
+ template<typename NewScalarType>
128
+ inline typename internal::cast_return_type<AngleAxis,AngleAxis<NewScalarType> >::type cast() const
129
+ { return typename internal::cast_return_type<AngleAxis,AngleAxis<NewScalarType> >::type(*this); }
130
+
131
+ /** Copy constructor with scalar type conversion */
132
+ template<typename OtherScalarType>
133
+ inline explicit AngleAxis(const AngleAxis<OtherScalarType>& other)
134
+ {
135
+ m_axis = other.axis().template cast<Scalar>();
136
+ m_angle = Scalar(other.angle());
137
+ }
138
+
139
+ /** \returns \c true if \c *this is approximately equal to \a other, within the precision
140
+ * determined by \a prec.
141
+ *
142
+ * \sa MatrixBase::isApprox() */
143
+ bool isApprox(const AngleAxis& other, typename NumTraits<Scalar>::Real prec = precision<Scalar>()) const
144
+ { return m_axis.isApprox(other.m_axis, prec) && ei_isApprox(m_angle,other.m_angle, prec); }
145
+ };
146
+
147
+ /** \ingroup Geometry_Module
148
+ * single precision angle-axis type */
149
+ typedef AngleAxis<float> AngleAxisf;
150
+ /** \ingroup Geometry_Module
151
+ * double precision angle-axis type */
152
+ typedef AngleAxis<double> AngleAxisd;
153
+
154
+ /** Set \c *this from a quaternion.
155
+ * The axis is normalized.
156
+ */
157
+ template<typename Scalar>
158
+ AngleAxis<Scalar>& AngleAxis<Scalar>::operator=(const QuaternionType& q)
159
+ {
160
+ Scalar n2 = q.vec().squaredNorm();
161
+ if (n2 < precision<Scalar>()*precision<Scalar>())
162
+ {
163
+ m_angle = 0;
164
+ m_axis << 1, 0, 0;
165
+ }
166
+ else
167
+ {
168
+ m_angle = 2*std::acos(q.w());
169
+ m_axis = q.vec() / ei_sqrt(n2);
170
+ }
171
+ return *this;
172
+ }
173
+
174
+ /** Set \c *this from a 3x3 rotation matrix \a mat.
175
+ */
176
+ template<typename Scalar>
177
+ template<typename Derived>
178
+ AngleAxis<Scalar>& AngleAxis<Scalar>::operator=(const MatrixBase<Derived>& mat)
179
+ {
180
+ // Since a direct conversion would not be really faster,
181
+ // let's use the robust Quaternion implementation:
182
+ return *this = QuaternionType(mat);
183
+ }
184
+
185
+ /** Constructs and \returns an equivalent 3x3 rotation matrix.
186
+ */
187
+ template<typename Scalar>
188
+ typename AngleAxis<Scalar>::Matrix3
189
+ AngleAxis<Scalar>::toRotationMatrix(void) const
190
+ {
191
+ Matrix3 res;
192
+ Vector3 sin_axis = ei_sin(m_angle) * m_axis;
193
+ Scalar c = ei_cos(m_angle);
194
+ Vector3 cos1_axis = (Scalar(1)-c) * m_axis;
195
+
196
+ Scalar tmp;
197
+ tmp = cos1_axis.x() * m_axis.y();
198
+ res.coeffRef(0,1) = tmp - sin_axis.z();
199
+ res.coeffRef(1,0) = tmp + sin_axis.z();
200
+
201
+ tmp = cos1_axis.x() * m_axis.z();
202
+ res.coeffRef(0,2) = tmp + sin_axis.y();
203
+ res.coeffRef(2,0) = tmp - sin_axis.y();
204
+
205
+ tmp = cos1_axis.y() * m_axis.z();
206
+ res.coeffRef(1,2) = tmp - sin_axis.x();
207
+ res.coeffRef(2,1) = tmp + sin_axis.x();
208
+
209
+ res.diagonal() = (cos1_axis.cwise() * m_axis).cwise() + c;
210
+
211
+ return res;
212
+ }
213
+
214
+ } // end namespace Eigen