oILAB
Loading...
Searching...
No Matches
Rotation.h
Go to the documentation of this file.
1//
2// Created by Nikhil Chandra Admal on 12/31/23.
3//
4
5#ifndef OILAB_ROTATION_H
6#define OILAB_ROTATION_H
7
8#include<Eigen/Eigen>
9
10template<int dim>
11class Rotation : public Eigen::Matrix<double,dim,dim>
12{
13 template<int dm=dim>
14 typename std::enable_if<dm==2, Eigen::Matrix<double,dim,dim> >::type
15 static getMatrix(const Eigen::Matrix<double,dim,dim-1>& orthogonalVectors)
16 {
17 Eigen::Matrix<double,dim,dim> output;
18 output.row(0)= orthogonalVectors.col(0).normalized();
19 output.row(1)=Eigen::Rotation2D<double>(M_PI/2)*orthogonalVectors.col(0).normalized();
20 return output;
21 }
22 template<int dm=dim>
23 typename std::enable_if<dm==3, Eigen::Matrix<double,dim,dim> >::type
24 static getMatrix(const Eigen::Matrix<double,dim,dim-1>& orthogonalVectors)
25 {
26 assert(abs(orthogonalVectors.col(0).dot(orthogonalVectors.col(1))) < FLT_EPSILON);
27 Eigen::Matrix<double,dim,dim> output;
28 output.row(0)= orthogonalVectors.col(0).normalized();
29 output.row(1)= orthogonalVectors.col(1).normalized();
30 output.row(2)= (output.row(0).cross(output.row(1))).normalized();
31 return output;
32 }
33public:
34 Rotation(const Eigen::Matrix<double,dim,dim-1> orthogonalVectors) :
35 Eigen::Matrix<double,dim,dim>(getMatrix(orthogonalVectors))
36 {
37 }
38};
39#endif //OILAB_ROTATION_H
static std::enable_if< dm==2, Eigen::Matrix< double, dim, dim > >::type getMatrix(const Eigen::Matrix< double, dim, dim-1 > &orthogonalVectors)
Definition Rotation.h:15
static std::enable_if< dm==3, Eigen::Matrix< double, dim, dim > >::type getMatrix(const Eigen::Matrix< double, dim, dim-1 > &orthogonalVectors)
Definition Rotation.h:24
Rotation(const Eigen::Matrix< double, dim, dim-1 > orthogonalVectors)
Definition Rotation.h:34