15 #ifndef ECL_GEOMETRY_HOMOGENEOUS_POINT_HPP_ 16 #define ECL_GEOMETRY_HOMOGENEOUS_POINT_HPP_ 22 #include <ecl/mpl.hpp> 23 #include <ecl/type_traits.hpp> 25 #include <ecl/config/macros.hpp> 26 #include <ecl/exceptions/standard_exception.hpp> 27 #include <ecl/linear_algebra.hpp> 28 #include <ecl/math.hpp> 45 template <
typename T,
typename Enable =
void>
56 class HomogeneousPoint<T, typename
ecl::enable_if< ecl::is_float<T> >::type> {
58 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
62 HomogeneousPoint(
const T &value = T()) {
63 elements.template block<3,1>(0,0) = ecl::linear_algebra::Matrix<T,3,1>::Constant(value);
74 HomogeneousPoint(
const ecl::linear_algebra::Matrix<T,3,1> &vec) {
75 elements.template block<3,1>(0,0) = vec;
85 HomogeneousPoint(
const ecl::linear_algebra::Matrix<T,4,1> &vec) : elements(vec) {
95 HomogeneousPoint(
const T &x_i,
const T &y_i,
const T &z_i) {
96 elements << x_i, y_i, z_i, 1.0;
99 virtual ~HomogeneousPoint() {}
117 ecl::linear_algebra::CommaInitializer< ecl::linear_algebra::Matrix<T,4,1> >
operator<<(
const T &value) {
118 return elements.operator<<(value);
128 ecl::linear_algebra::Matrix<T,4,1>& positionVector() {
return elements; }
137 const ecl::linear_algebra::Matrix<T,4,1>& positionVector()
const {
return elements; }
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]; }
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);
184 ecl::linear_algebra::Matrix<T,4,1> elements;
200 template <
typename OutputStream,
typename Type>
201 OutputStream& operator<<(OutputStream &ostream , const HomogeneousPoint<Type> &point) {
202 ostream <<
"[ " << point.x() <<
" " << point.y() <<
" " << point.z() <<
" ]";
#define LOC
Stringify the line of code you are at.
OutputStream & operator<<(OutputStream &ostream, const Void void_object)
Output stream operator for Void objects.
HomogeneousPoint< double > HomogeneousPointd
HomogeneousPoint< float > HomogeneousPointf
#define ecl_assert_throw(expression, exception)
Debug mode throw with a logical condition check.
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.