Advertisement
atimholt

make_rotation

Sep 15th, 2016
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.78 KB | None | 0 0
  1. /// Make a rotation matrix based on its transform of the axial versors.
  2. ///
  3. /// \param transformed_versors  a kDimensions-sized initializer list of
  4. ///                             kDimensions-dimensional Points.
  5. ///
  6. /// \todo  Consider a variadic function.
  7. ///
  8. /// \sa  https://en.wikipedia.org/wiki/Versor_(physics)
  9. ///
  10. template <typename RatT, size_t kDimensions>
  11. auto make_rotation(
  12.     const std::initializer_list<Point<RatT, kDimensions>>& transformed_versors)
  13.     -> std::enable_if<transformed_versors.size() == kDimensions,
  14.         Matrix<RatT, kDimensions + 1>>
  15. {
  16.   Matrix<RatT, kDimensions + 1> ret{};
  17.  
  18.   auto versor = std::cbegin(transformed_versors);
  19.   for (int i = 0; i < kDimensions; ++i, ++versor) {
  20.     ret.set_column(i, versor->as_vector());
  21.   }
  22.  
  23.   return ret;
  24. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement