cgv
pose.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "fvec.h"
4 #include "fmat.h"
5 #include "quaternion.h"
6 #include <cassert>
7 
12 namespace cgv {
13  namespace math {
14 
16 template <typename T> fmat<T, 3, 3>& pose_orientation(fmat<T, 3, 4>& pose) { return reinterpret_cast<fmat<T, 3, 3>&>(pose); }
17 template <typename T> const fmat<T, 3, 3>& pose_orientation(const fmat<T, 3, 4>& pose) { return reinterpret_cast<const fmat<T, 3, 3>&>(pose); }
19 template <typename T> fvec<T, 3>& pose_position(fmat<T, 3, 4>& pose) { return reinterpret_cast<fvec<T, 3>&>(pose(0, 3)); }
20 template <typename T> const fvec<T, 3>& pose_position(const fmat<T, 3, 4>& pose) { return reinterpret_cast<const fvec<T, 3>&>(pose(0, 3)); }
21 
23 template <typename T>
24 fvec<T, 3> pose_transform_point(const fmat<T, 3, 4>& pose, const fvec<T, 3>& p) { return pose_orientation(pose)* p + pose_position(pose); }
26 template <typename T>
27 fvec<T, 3> pose_transform_point(const quaternion<T>& q, const fvec<T,3>& pos, const fvec<T, 3>& p) { return q.get_rotated(p) + pos; }
29 template <typename T>
30 fvec<T, 3> pose_transform_vector(const fmat<T, 3, 4>& pose, const fvec<T, 3>& v) { return pose_orientation(pose) * v; }
32 template <typename T>
35 template <typename T>
38 template <typename T> void invert_pose(fmat<T, 3, 4>& pose) { pose_orientation(pose).transpose(); pose_position(pose) = -pose_orientation(pose)*pose_position(pose); }
40 template <typename T> fmat<T, 3, 4> pose_inverse(const fmat<T, 3, 4>& pose) { fmat<T, 3, 4> inv_pose = pose; invert_pose(inv_pose); return inv_pose; }
42 template <typename T> fmat<T, 3, 4> pose_construct(const fmat<T, 3, 3>& orientation, const fvec<T, 3>& position) { fmat<T, 3, 4> pose; pose_orientation(pose) = orientation; pose_position(pose) = position; return pose; }
44 template <typename T> fmat<T, 3, 4> pose_construct(const quaternion<T>& orientation, const fvec<T, 3>& position) { fmat<T, 3, 4> pose; orientation.put_matrix(pose_orientation(pose)); pose_position(pose) = position; return pose; }
46 template <typename T> void pose_append(fmat<T, 3, 4>& pose_1, const fmat<T, 3, 4>& pose_2) {
47  pose_position(pose_1) += pose_orientation(pose_1)*pose_position(pose_2);
48  pose_orientation(pose_1) *= pose_orientation(pose_2);
49 }
51 template <typename T> void pose_transform(const fmat<T, 3, 4>& pose_transform, fmat<T, 3, 4>& pose) {
54 }
56 template <typename T> fmat<T, 3, 4> pose_concat(const fmat<T, 3, 4>& pose_1, const fmat<T, 3, 4>& pose_2) {
57  fmat<T, 3, 4> pose = pose_1;
58  pose_append(pose, pose_2);
59  return pose;
60 }
61 
62  }
63 }
cgv::math::fmat
matrix of fixed size dimensions
Definition: fmat.h:23
cgv::math::pose_append
void pose_append(fmat< T, 3, 4 > &pose_1, const fmat< T, 3, 4 > &pose_2)
inplace concatenation of a pose matrix
Definition: pose.h:46
cgv::math::quaternion::get_rotated
vec_type get_rotated(const vec_type &v) const
return rotated vector
Definition: quaternion.h:183
cgv::math::pose_transform
void pose_transform(const fmat< T, 3, 4 > &pose_transform, fmat< T, 3, 4 > &pose)
inplace transformation of a pose matrix with another pose transformation matrix
Definition: pose.h:51
cgv::math::fvec< T, 3 >
cgv::math::quaternion
Definition: quaternion.h:15
cgv::math::pose_concat
fmat< T, 3, 4 > pose_concat(const fmat< T, 3, 4 > &pose_1, const fmat< T, 3, 4 > &pose_2)
return concatenate of two pose transformations
Definition: pose.h:56
cgv::math::pose_construct
fmat< T, 3, 4 > pose_construct(const fmat< T, 3, 3 > &orientation, const fvec< T, 3 > &position)
construct pose from rotation matrix and position vector
Definition: pose.h:42
cgv::math::inverse_pose_transform_point
fvec< T, 3 > inverse_pose_transform_point(const fmat< T, 3, 4 > &pose, const fvec< T, 3 > &p)
transform point with inverse of pose matrix
Definition: pose.h:33
cgv::math::pose_inverse
fmat< T, 3, 4 > pose_inverse(const fmat< T, 3, 4 > &pose)
return a pose matrix with the inverse pose transformation
Definition: pose.h:40
cgv::math::inverse_pose_transform_vector
fvec< T, 3 > inverse_pose_transform_vector(const fmat< T, 3, 4 > &pose, const fvec< T, 3 > &v)
transform vector with inverse of pose matrix
Definition: pose.h:36
cgv::math::invert_pose
void invert_pose(fmat< T, 3, 4 > &pose)
inplace inversion of pose transformation
Definition: pose.h:38
cgv::math::pose_transform_vector
fvec< T, 3 > pose_transform_vector(const fmat< T, 3, 4 > &pose, const fvec< T, 3 > &v)
transform vector with pose matrix
Definition: pose.h:30
cgv::math::pose_position
fvec< T, 3 > & pose_position(fmat< T, 3, 4 > &pose)
extract position vector from pose matrix
Definition: pose.h:19
cgv::math::pose_transform_point
fvec< T, 3 > pose_transform_point(const fmat< T, 3, 4 > &pose, const fvec< T, 3 > &p)
transform point with pose matrix
Definition: pose.h:24
cgv::math::quaternion::put_matrix
void put_matrix(mat_type &M) const
compute equivalent 3x3 rotation matrix
Definition: quaternion.h:122
cgv::math::pose_orientation
fmat< T, 3, 3 > & pose_orientation(fmat< T, 3, 4 > &pose)
extract orientation matrix from pose matrix
Definition: pose.h:16
cgv
the cgv namespace
Definition: vr_calib.cxx:9