Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef RTC_ROTATION2D_H
00020 #define RTC_ROTATION2D_H
00021
00022
00023 #include "rtc/rtcMath.h"
00024 #include "rtc/rtcTransform2D.h"
00025 #include "rtc/rtcSMat2.h"
00026
00027
00028 namespace rtc {
00029
00030
00031 template <class T> class Rotation2D;
00032 template <class T> class Transform2D;
00033
00043 template <class T>
00044 class Rotation2D: public SMat2<T> {
00045 public:
00047 using SMat2<T>::x;
00048 using SMat2<T>::set;
00049
00051 Rotation2D();
00052 Rotation2D(const T x11, const T x12,
00053 const T x21, const T x22);
00054 Rotation2D(const Mat<T,2,2>& m);
00055 Rotation2D(const T& theta);
00056
00058 void set(const T& theta);
00059
00061 void apply(Vec2<T>& v) const;
00062 Vec2<T> apply(const Vec2<T>& v) const;
00063
00065 T getTheta();
00066 };
00067
00068
00069 typedef Rotation2D<float> Rotation2Df;
00070 typedef Rotation2D<double> Rotation2Dd;
00071
00072
00073
00074
00075
00076
00077
00080 template <class T>
00081 inline Rotation2D<T>::Rotation2D() {
00082 x[0] = x[3] = T(1);
00083 x[1] = x[2] = 0;
00084 }
00085
00088 template <class T>
00089 inline Rotation2D<T>::Rotation2D(const T x11, const T x12,
00090 const T x21, const T x22) {
00091 x[0] = x11; x[1] = x12;
00092 x[2] = x21; x[3] = x22;
00093 }
00094
00097 template <class T>
00098 inline Rotation2D<T>::Rotation2D(const Mat<T,2,2>& m) : SMat2<T>(m) {}
00099
00102 template <class T>
00103 inline Rotation2D<T>::Rotation2D(const T& theta) {
00104 x[0] = cos(theta);
00105 x[1] = -sin(theta);
00106 x[2] = sin(theta);
00107 x[3] = cos(theta);
00108 }
00109
00110
00111
00114 template <class T>
00115 inline void Rotation2D<T>::set(const T& theta) {
00116 x[0] = cos(theta);
00117 x[1] = -sin(theta);
00118 x[2] = sin(theta);
00119 x[3] = cos(theta);
00120 }
00121
00122
00123 template <class T>
00124 inline T Rotation2D<T>::getTheta() {
00125 return atan2(x[2],x[0]);
00126 }
00127
00130 template <class T>
00131 inline void Rotation2D<T>::apply(Vec2<T>& v) const {
00132 v.set((*this)*v);
00133 }
00134
00137 template <class T>
00138 inline Vec2<T> Rotation2D<T>::apply(const Vec2<T>& v) const {
00139 return((*this)*v);
00140 }
00141
00142
00143 }
00144
00145 #endif // RTC_ROTATION2D_H defined
00146