Visual Servoing Platform  version 3.4.0
vpImagePoint.h
1 /****************************************************************************
2  *
3  * ViSP, open source Visual Servoing Platform software.
4  * Copyright (C) 2005 - 2019 by Inria. All rights reserved.
5  *
6  * This software is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  * See the file LICENSE.txt at the root directory of this source
11  * distribution for additional information about the GNU GPL.
12  *
13  * For using ViSP with software that can not be combined with the GNU
14  * GPL, please contact Inria about acquiring a ViSP Professional
15  * Edition License.
16  *
17  * See http://visp.inria.fr for more information.
18  *
19  * This software was developed at:
20  * Inria Rennes - Bretagne Atlantique
21  * Campus Universitaire de Beaulieu
22  * 35042 Rennes Cedex
23  * France
24  *
25  * If you have questions regarding the use of this file, please contact
26  * Inria at visp@inria.fr
27  *
28  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
29  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
30  *
31  * Description:
32  * 2D point useful for image processing
33  *
34  * Authors:
35  * Nicolas Melchior
36  * Fabien Spindler
37  *
38  *****************************************************************************/
39 
40 #ifndef vpImagePoint_H
41 #define vpImagePoint_H
42 
49 #include <visp3/core/vpConfig.h>
50 
51 #include <cmath> // std::fabs
52 #include <limits> // numeric_limits
53 #include <ostream>
54 #include <vector>
55 
56 class vpRect;
57 
87 class VISP_EXPORT vpImagePoint
88 {
89 public:
94  inline vpImagePoint() : i(0), j(0) {}
99  inline vpImagePoint(double ii, double jj) : i(ii), j(jj) {}
107  inline vpImagePoint(const vpImagePoint &ip) : i(ip.i), j(ip.j) {}
109  inline virtual ~vpImagePoint() { }
110 
115  {
116  this->i = ip.i;
117  this->j = ip.j;
118  return *this;
119  }
120 #if (VISP_CXX_STANDARD >= VISP_CXX_STANDARD_11)
121 
124  inline vpImagePoint &operator=(const vpImagePoint &&ip) noexcept
125  {
126  this->i = ip.i;
127  this->j = ip.j;
128  return *this;
129  }
130 #endif
131 
132  vpImagePoint &operator+=(const vpImagePoint &ip);
133 
140  {
141  this->i -= ip.i;
142  this->j -= ip.j;
143  return *this;
144  }
145  vpImagePoint &operator/=(double scale);
150  inline vpImagePoint &operator*=(double scale)
151  {
152  this->i *= scale;
153  this->j *= scale;
154  return *this;
155  }
156 
166  inline void set_i(double ii) { this->i = ii; }
167 
177  inline void set_j(double jj) { this->j = jj; }
178 
188  inline void set_ij(double ii, double jj)
189  {
190  this->i = ii;
191  this->j = jj;
192  }
193 
203  inline double get_i() const { return i; }
204 
214  inline double get_j() const { return j; }
215 
225  inline void set_u(double u) { j = u; }
226 
236  inline void set_v(double v) { i = v; }
237 
247  inline void set_uv(double u, double v)
248  {
249  this->i = v;
250  this->j = u;
251  }
252 
262  inline double get_u() const { return j; }
263 
273  inline double get_v() const { return i; }
274 
275  static vpRect getBBox(const std::vector<vpImagePoint> &ipVec);
276 
277  static double distance(const vpImagePoint &iP1, const vpImagePoint &iP2);
278  static double sqrDistance(const vpImagePoint &iP1, const vpImagePoint &iP2);
279 
280  bool inRectangle(const vpRect &rect) const;
281 
282  friend VISP_EXPORT bool operator==(const vpImagePoint &ip1, const vpImagePoint &ip2);
283  friend VISP_EXPORT bool operator!=(const vpImagePoint &ip1, const vpImagePoint &ip2);
284  friend VISP_EXPORT vpImagePoint operator+=(const vpImagePoint &ip1, const vpImagePoint &ip2);
285  friend VISP_EXPORT vpImagePoint operator+(const vpImagePoint &ip1, const vpImagePoint &ip2);
286  friend VISP_EXPORT vpImagePoint operator+(const vpImagePoint &ip1, int offset);
287  friend VISP_EXPORT vpImagePoint operator+(const vpImagePoint &ip1, unsigned int offset);
288  friend VISP_EXPORT vpImagePoint operator+(const vpImagePoint &ip1, double offset);
289  friend VISP_EXPORT vpImagePoint operator-(const vpImagePoint &ip1, const vpImagePoint &ip2);
290  friend VISP_EXPORT vpImagePoint operator-(const vpImagePoint &ip1, int offset);
291  friend VISP_EXPORT vpImagePoint operator-(const vpImagePoint &ip1, unsigned int offset);
292  friend VISP_EXPORT vpImagePoint operator-(const vpImagePoint &ip1, double offset);
293  friend VISP_EXPORT vpImagePoint operator*(const vpImagePoint &ip1, double scale);
294  friend VISP_EXPORT vpImagePoint operator/(const vpImagePoint &ip1, double scale);
295  friend VISP_EXPORT std::ostream &operator<<(std::ostream &os, const vpImagePoint &ip);
296 
297 private:
298  double i, j;
299 };
300 
301 #endif
double get_v() const
Definition: vpImagePoint.h:273
double get_i() const
Definition: vpImagePoint.h:203
vpImagePoint & operator=(const vpImagePoint &&ip) noexcept
Definition: vpImagePoint.h:124
void set_u(double u)
Definition: vpImagePoint.h:225
void set_uv(double u, double v)
Definition: vpImagePoint.h:247
double get_u() const
Definition: vpImagePoint.h:262
double get_j() const
Definition: vpImagePoint.h:214
vpImagePoint & operator*=(double scale)
Definition: vpImagePoint.h:150
vpColVector operator*(const double &x, const vpColVector &v)
void set_i(double ii)
Definition: vpImagePoint.h:166
vpImagePoint(const vpImagePoint &ip)
Definition: vpImagePoint.h:107
vpImagePoint & operator-=(const vpImagePoint &ip)
Definition: vpImagePoint.h:139
vpImagePoint & operator=(const vpImagePoint &ip)
Definition: vpImagePoint.h:114
void set_j(double jj)
Definition: vpImagePoint.h:177
void set_v(double v)
Definition: vpImagePoint.h:236
void set_ij(double ii, double jj)
Definition: vpImagePoint.h:188
vpImagePoint(double ii, double jj)
Definition: vpImagePoint.h:99
Defines a rectangle in the plane.
Definition: vpRect.h:79
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
Definition: vpImagePoint.h:87
virtual ~vpImagePoint()
Destructor.
Definition: vpImagePoint.h:109