homogeneous_point.hpp
Go to the documentation of this file.
1 
11 /*****************************************************************************
12 ** Ifdefs
13 *****************************************************************************/
14 
15 #ifndef ECL_GEOMETRY_HOMOGENEOUS_POINT_HPP_
16 #define ECL_GEOMETRY_HOMOGENEOUS_POINT_HPP_
17 
18 /*****************************************************************************
19 ** Includes
20 *****************************************************************************/
21 
22 #include <ecl/mpl.hpp>
23 #include <ecl/type_traits.hpp>
24 
25 #include <ecl/config/macros.hpp>
26 #include <ecl/exceptions/standard_exception.hpp>
27 #include <ecl/linear_algebra.hpp>
28 #include <ecl/math.hpp>
29 
30 /*****************************************************************************
31 ** Namespaces
32 *****************************************************************************/
33 
34 namespace ecl {
35 
36 /*****************************************************************************
37 ** Interface [HomogeneousPoint]
38 *****************************************************************************/
45 template <typename T, typename Enable = void>
46 class HomogeneousPoint : public ecl::FailedObject {};
47 
55 template<typename T>
56 class HomogeneousPoint<T, typename ecl::enable_if< ecl::is_float<T> >::type> {
57 public:
58  EIGEN_MAKE_ALIGNED_OPERATOR_NEW // needed for 16B alignment
62  HomogeneousPoint(const T &value = T()) {
63  elements.template block<3,1>(0,0) = ecl::linear_algebra::Matrix<T,3,1>::Constant(value);
64  elements(3,0) = 1.0;
65  }
74  HomogeneousPoint(const ecl::linear_algebra::Matrix<T,3,1> &vec) {
75  elements.template block<3,1>(0,0) = vec;
76  elements[3] = 1.0;
77  }
85  HomogeneousPoint(const ecl::linear_algebra::Matrix<T,4,1> &vec) : elements(vec) {
87  }
95  HomogeneousPoint(const T &x_i, const T &y_i, const T &z_i) {
96  elements << x_i, y_i, z_i, 1.0;
97  }
98 
99  virtual ~HomogeneousPoint() {}
100 
101  /*********************
102  ** Assignment
103  **********************/
117  ecl::linear_algebra::CommaInitializer< ecl::linear_algebra::Matrix<T,4,1> > operator<<(const T &value) {
118  return elements.operator<<(value);
119  }
120 
128  ecl::linear_algebra::Matrix<T,4,1>& positionVector() { return elements; }
129 
137  const ecl::linear_algebra::Matrix<T,4,1>& positionVector() const { return elements; }
138 
144  const T& x() const { return elements[0]; }
150  const T& y() const { return elements[1]; }
156  const T& z() const { return elements[2]; }
162  T x() { return elements[0]; }
168  T y() { return elements[1]; }
174  T z() { return elements[2]; }
175 
176  void x(const T& value) { elements[0] = value; }
177  void y(const T& value) { elements[1] = value; }
178  void z(const T& value) { elements[2] = value; }
180  template <typename OutputStream, typename Type>
181  friend OutputStream& operator<<(OutputStream &ostream , const HomogeneousPoint<Type> &point);
182 
183 private:
184  ecl::linear_algebra::Matrix<T,4,1> elements;
185 };
186 
190 /*********************
191 ** Streaming
192 **********************/
200 template <typename OutputStream, typename Type>
201 OutputStream& operator<<(OutputStream &ostream , const HomogeneousPoint<Type> &point) {
202  ostream << "[ " << point.x() << " " << point.y() << " " << point.z() << " ]";
203  return ostream;
204 }
205 } // namespace ecl
206 
207 #endif /* ECL_GEOMETRY_HOMOGENEOUS_POINT_HPP_ */
#define LOC
Stringify the line of code you are at.
OutputStream & operator<<(OutputStream &ostream, const Void void_object)
Output stream operator for Void objects.
Definition: void.hpp:76
HomogeneousPoint< double > HomogeneousPointd
HomogeneousPoint< float > HomogeneousPointf
#define ecl_assert_throw(expression, exception)
Debug mode throw with a logical condition check.
InvalidInputError
Standard exception type, provides code location and error string.
An object designed to fail with compile time error upon instantiation.
Dummy parent class for Homogenous points.


xbot_driver
Author(s): Roc, wangpeng@droid.ac.cn
autogenerated on Sat Oct 10 2020 03:27:37