Visual Servoing Platform version 3.5.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
56class vpRect;
57
87class VISP_EXPORT vpImagePoint
88{
89public:
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)
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
297private:
298 double i, j;
299};
300
301#endif
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
Definition: vpImagePoint.h:88
vpImagePoint & operator-=(const vpImagePoint &ip)
Definition: vpImagePoint.h:139
vpImagePoint & operator*=(double scale)
Definition: vpImagePoint.h:150
void set_j(double jj)
Definition: vpImagePoint.h:177
vpImagePoint & operator=(const vpImagePoint &ip)
Definition: vpImagePoint.h:114
double get_j() const
Definition: vpImagePoint.h:214
vpImagePoint(double ii, double jj)
Definition: vpImagePoint.h:99
void set_ij(double ii, double jj)
Definition: vpImagePoint.h:188
virtual ~vpImagePoint()
Destructor.
Definition: vpImagePoint.h:109
void set_i(double ii)
Definition: vpImagePoint.h:166
double get_u() const
Definition: vpImagePoint.h:262
void set_u(double u)
Definition: vpImagePoint.h:225
void set_uv(double u, double v)
Definition: vpImagePoint.h:247
vpImagePoint & operator=(const vpImagePoint &&ip) noexcept
Definition: vpImagePoint.h:124
vpImagePoint(const vpImagePoint &ip)
Definition: vpImagePoint.h:107
void set_v(double v)
Definition: vpImagePoint.h:236
double get_i() const
Definition: vpImagePoint.h:203
double get_v() const
Definition: vpImagePoint.h:273
Defines a rectangle in the plane.
Definition: vpRect.h:80
vpColVector operator*(const double &x, const vpColVector &v)