ruby-eigen 0.0.9 → 0.0.10.pre1

Sign up to get free protection for your applications and to get access to all the features.
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