40 Eigen::Vector3f tmp0 = (y_direction.cross(z_axis)).normalized();
41 Eigen::Vector3f tmp1 = (z_axis.cross(tmp0)).normalized();
42 Eigen::Vector3f tmp2 = z_axis.normalized();
44 transformation(0,0)=tmp0[0]; transformation(0,1)=tmp0[1]; transformation(0,2)=tmp0[2]; transformation(0,3)=0.0f;
45 transformation(1,0)=tmp1[0]; transformation(1,1)=tmp1[1]; transformation(1,2)=tmp1[2]; transformation(1,3)=0.0f;
46 transformation(2,0)=tmp2[0]; transformation(2,1)=tmp2[1]; transformation(2,2)=tmp2[2]; transformation(2,3)=0.0f;
47 transformation(3,0)=0.0f; transformation(3,1)=0.0f; transformation(3,2)=0.0f; transformation(3,3)=1.0f;
52 Eigen::Affine3f transformation;
54 return transformation;
59 Eigen::Vector3f tmp2 = (x_axis.cross(y_direction)).normalized();
60 Eigen::Vector3f tmp1 = (tmp2.cross(x_axis)).normalized();
61 Eigen::Vector3f tmp0 = x_axis.normalized();
63 transformation(0,0)=tmp0[0]; transformation(0,1)=tmp0[1]; transformation(0,2)=tmp0[2]; transformation(0,3)=0.0f;
64 transformation(1,0)=tmp1[0]; transformation(1,1)=tmp1[1]; transformation(1,2)=tmp1[2]; transformation(1,3)=0.0f;
65 transformation(2,0)=tmp2[0]; transformation(2,1)=tmp2[1]; transformation(2,2)=tmp2[2]; transformation(2,3)=0.0f;
66 transformation(3,0)=0.0f; transformation(3,1)=0.0f; transformation(3,2)=0.0f; transformation(3,3)=1.0f;
71 Eigen::Affine3f transformation;
73 return transformation;
83 Eigen::Affine3f transformation;
85 return transformation;
89 const Eigen::Vector3f& origin, Eigen::Affine3f& transformation)
92 Eigen::Vector3f translation = transformation*origin;
93 transformation(0,3)=-translation[0]; transformation(1,3)=-translation[1]; transformation(2,3)=-translation[2];
98 roll = atan2f(t(2,1), t(2,2));
99 pitch = asinf(-t(2,0));
100 yaw = atan2f(t(1,0), t(0,0));
108 roll = atan2f(t(2,1), t(2,2));
109 pitch = asinf(-t(2,0));
110 yaw = atan2f(t(1,0), t(0,0));
115 float A=cosf(yaw),
B=sinf(yaw), C=cosf(pitch), D=sinf(pitch),
116 E=cosf(roll), F=sinf(roll), DE=D*E, DF=D*F;
117 t(0,0) = A*C; t(0,1) = A*DF -
B*E; t(0,2) =
B*F + A*DE; t(0,3) = x;
118 t(1,0) =
B*C; t(1,1) = A*E +
B*DF; t(1,2) =
B*DE - A*F; t(1,3) = y;
119 t(2,0) = -D; t(2,1) = C*F; t(2,2) = C*E; t(2,3) = z;
120 t(3,0) = 0; t(3,1) = 0; t(3,2) = 0; t(3,3) = 1;
130 template <
typename Derived>
void
133 uint32_t rows =
static_cast<uint32_t
> (matrix.rows ()), cols = static_cast<uint32_t> (matrix.cols ());
134 file.write (reinterpret_cast<char*> (&rows),
sizeof (rows));
135 file.write (reinterpret_cast<char*> (&cols),
sizeof (cols));
136 for (uint32_t i = 0; i < rows; ++i)
137 for (uint32_t j = 0; j < cols; ++j)
139 typename Derived::Scalar tmp = matrix(i,j);
140 file.write (reinterpret_cast<const char*> (&tmp),
sizeof (tmp));
144 template <
typename Derived>
void
147 Eigen::MatrixBase<Derived> &matrix =
const_cast<Eigen::MatrixBase<Derived> &
> (matrix_);
150 file.read (reinterpret_cast<char*> (&rows),
sizeof (rows));
151 file.read (reinterpret_cast<char*> (&cols),
sizeof (cols));
152 if (matrix.rows () !=
static_cast<int>(rows) || matrix.cols () !=
static_cast<int>(cols))
153 matrix.derived().resize(rows, cols);
155 for (uint32_t i = 0; i < rows; ++i)
156 for (uint32_t j = 0; j < cols; ++j)
158 typename Derived::Scalar tmp;
159 file.read (reinterpret_cast<char*> (&tmp),
sizeof (tmp));