38 #ifndef FCL_CCD_INTERVAL_MATRIX_INL_H 39 #define FCL_CCD_INTERVAL_MATRIX_INL_H 48 struct IMatrix3<double>;
71 v_[0].setValue(m.row(0)[0], m.row(0)[1], m.row(0)[2]);
72 v_[1].setValue(m.row(1)[0], m.row(1)[1], m.row(1)[2]);
73 v_[2].setValue(m.row(2)[0], m.row(2)[1], m.row(2)[2]);
100 v_[2].setValue(m[2]);
104 template <
typename S>
113 template <
typename S>
116 v_[0].setValue(1, 0, 0);
117 v_[1].setValue(0, 1, 0);
118 v_[2].setValue(0, 0, 1);
122 template <
typename S>
129 template <
typename S>
136 template <
typename S>
139 return Vector3<S>(v_[0][i][0], v_[1][i][0], v_[2][i][0]);
143 template <
typename S>
146 return Vector3<S>(v_[i][0][0], v_[i][1][0], v_[i][2][0]);
150 template <
typename S>
153 return Vector3<S>(v_[0][i][1], v_[1][i][1], v_[2][i][1]);
157 template <
typename S>
160 return Vector3<S>(v_[i][0][1], v_[i][1][1], v_[i][2][1]);
164 template <
typename S>
168 m << v_[0][0][1], v_[0][1][1], v_[0][2][1],
169 v_[1][0][1], v_[1][1][1], v_[1][2][1],
170 v_[2][0][1], v_[2][1][1], v_[2][2][1];
175 template <
typename S>
179 m << v_[0][0][1], v_[0][1][1], v_[0][2][1],
180 v_[1][0][1], v_[1][1][1], v_[1][2][1],
181 v_[2][0][1], v_[2][1][1], v_[2][2][1];
186 template <
typename S>
193 template <
typename S>
200 template <
typename S>
203 return IMatrix3(
IVector3<S>(v_[0].dot(m.col(0)), v_[0].dot(m.col(1)), v_[0].dot(m.col(2))),
204 IVector3<S>(v_[1].dot(m.col(0)), v_[1].dot(m.col(1)), v_[1].dot(m.col(2))),
205 IVector3<S>(v_[2].dot(m.col(0)), v_[2].dot(m.col(1)), v_[2].dot(m.col(2))));
209 template <
typename S>
212 return IVector3<S>(v_[0].dot(v), v_[1].dot(v), v_[2].dot(v));
216 template <
typename S>
219 return IVector3<S>(v_[0].dot(v), v_[1].dot(v), v_[2].dot(v));
223 template <
typename S>
231 IVector3<S>(v_[1].dot(mc0), v_[1].dot(mc1), v_[1].dot(mc2)),
232 IVector3<S>(v_[2].dot(mc0), v_[2].dot(mc1), v_[2].dot(mc2)));
236 template <
typename S>
239 v_[0].setValue(v_[0].dot(m.col(0)), v_[0].dot(m.col(1)), v_[0].dot(m.col(2)));
240 v_[1].setValue(v_[1].dot(m.col(0)), v_[1].dot(m.col(1)), v_[1].dot(m.col(2)));
241 v_[2].setValue(v_[2].dot(m.col(0)), v_[2].dot(m.col(1)), v_[2].dot(m.col(2)));
246 template <
typename S>
253 v_[0].setValue(v_[0].dot(mc0), v_[0].dot(mc1), v_[0].dot(mc2));
254 v_[1].setValue(v_[1].dot(mc0), v_[1].dot(mc1), v_[1].dot(mc2));
255 v_[2].setValue(v_[2].dot(mc0), v_[2].dot(mc1), v_[2].dot(mc2));
260 template <
typename S>
263 return IMatrix3(v_[0] + m.
v_[0], v_[1] + m.
v_[1], v_[2] + m.
v_[2]);
267 template <
typename S>
277 template <
typename S>
280 return IMatrix3(v_[0] - m.
v_[0], v_[1] - m.
v_[1], v_[2] - m.
v_[2]);
284 template <
typename S>
294 template <
typename S>
297 for(std::size_t i = 0; i < 3; ++i)
299 for(std::size_t j = 0; j < 3; ++j)
301 if(v_[i][j][0] < -1) v_[i][j][0] = -1;
302 else if(v_[i][j][0] > 1) v_[i][j][0] = 1;
304 if(v_[i][j][1] < -1) v_[i][j][1] = -1;
305 else if(v_[i][j][1] > 1) v_[i][j][1] = 1;
313 template <
typename S>
316 std::cout <<
"[" << v_[0][0][0] <<
"," << v_[0][0][1] <<
"]" <<
" [" << v_[0][1][0] <<
"," << v_[0][1][1] <<
"]" <<
" [" << v_[0][2][0] <<
"," << v_[0][2][1] <<
"]" << std::endl;
317 std::cout <<
"[" << v_[1][0][0] <<
"," << v_[1][0][1] <<
"]" <<
" [" << v_[1][1][0] <<
"," << v_[1][1][1] <<
"]" <<
" [" << v_[1][2][0] <<
"," << v_[1][2][1] <<
"]" << std::endl;
318 std::cout <<
"[" << v_[2][0][0] <<
"," << v_[2][0][1] <<
"]" <<
" [" << v_[2][1][0] <<
"," << v_[2][1][1] <<
"]" <<
" [" << v_[2][2][0] <<
"," << v_[2][2][1] <<
"]" << std::endl;
322 template <
typename S>
326 for(std::size_t i = 0; i < 3; ++i)
328 for(std::size_t j = 0; j < 3; ++j)
330 if(m(i, j)[0] < -1) res(i, j)[0] = -1;
331 else if(m(i, j)[0] > 1) res(i, j)[0] = 1;
333 if(m(i, j)[1] < -1) res(i, j)[1] = -1;
334 else if(m(i, j)[1] > 1) res(i, j)[1] = 1;
Vector3< S > getRowHigh(size_t i) const
IMatrix3 & operator+=(const IMatrix3 &m)
Matrix3< S > getLow() const
IMatrix3 & operator*=(const IMatrix3 &m)
IMatrix3 & rotationConstrain()
Eigen::Matrix< S, 3, 3 > Matrix3
Eigen::Matrix< S, 3, 1 > Vector3
Vector3< S > getRowLow(size_t i) const
Interval class for [a, b].
const Interval< S > & operator()(size_t i, size_t j) const
IMatrix3 operator-(const IMatrix3 &m) const
Vector3< S > getColumnLow(size_t i) const
Matrix3< S > getHigh() const
IMatrix3 & operator-=(const IMatrix3 &m)
template IMatrix3< double > rotationConstrain(const IMatrix3< double > &m)
const IVector3< S > & getRow(size_t i) const
IVector3< S > getColumn(size_t i) const
IVector3< S > operator*(const Vector3< S > &v) const
Vector3< S > getColumnHigh(size_t i) const
IMatrix3 operator+(const IMatrix3 &m) const