LSSTApplications  12.1-5-gbdcc3ab+2,15.0+13,15.0+26,15.0-1-g19261fa+17,15.0-1-g60afb23+26,15.0-1-g615e0bb+18,15.0-1-g788a293+26,15.0-1-ga91101e+26,15.0-1-gae1598d+12,15.0-1-gd076f1f+24,15.0-1-gdf18595+5,15.0-1-gf4f1c34+12,15.0-11-g7db6e543+4,15.0-12-g3681e7a+4,15.0-15-gc15de322,15.0-16-g83b84f4,15.0-2-g100d730+19,15.0-2-g1f9c9cf+4,15.0-2-g8aea5f4+1,15.0-2-gf38729e+21,15.0-29-ga12a2b06e,15.0-3-g11fe1a0+14,15.0-3-g707930d+3,15.0-3-g9103c06+12,15.0-3-gd3cbb57+3,15.0-4-g2d82b59,15.0-4-g535e784+10,15.0-4-g92ca6c3+4,15.0-4-gf906033+2,15.0-5-g23e394c+14,15.0-5-g4be42a9,15.0-6-g69628aa,15.0-6-g86e3f3d+1,15.0-6-gfa9b38f+4,15.0-7-g949993c+3,15.0-8-g67a62d3+1,15.0-8-gcf05001+1,15.0-9-g1e7c341+1,w.2018.21
LSSTDataManagementBasePackage
Public Types | Public Member Functions | Static Public Attributes | Protected Member Functions | Protected Attributes | Related Functions | List of all members
lsst::afw::geom::Extent< T, N > Class Template Reference

A coordinate class intended to represent offsets and dimensions. More...

#include <CoordinateBase.h>

Inheritance diagram for lsst::afw::geom::Extent< T, N >:
lsst::afw::geom::ExtentBase< T, N > lsst::afw::geom::CoordinateBase< Extent< T, N >, T, N >

Public Types

typedef Super::EigenVector EigenVector
 
typedef T Element
 

Public Member Functions

 Extent (T val=static_cast< T >(0))
 Construct an Extent with all elements set to the same scalar value. More...
 
 Extent (EigenVector const &vector)
 Construct an Extent from an Eigen vector. More...
 
 Extent (Point< T, N > const &other)
 Explicit constructor from Point. More...
 
template<typename U >
 Extent (Extent< U, N > const &other)
 Explicit constructor from Extent of different type (if allowed) More...
 
template<typename U >
 Extent (Point< U, N > const &other)
 
 Extent (Extent const &other)
 
 Extent (Extent &&other)
 
 ~Extent ()=default
 
Extentoperator= (Extent const &other)=default
 
Extentoperator= (Extent &&other)=default
 
computeSquaredNorm () const
 Return the squared L2 norm of the Extent (x^2 + y^2 + ...). More...
 
computeNorm () const
 Return the L2 norm of the Extent (sqrt(x^2 + y^2 + ...)). More...
 
void swap (Extent &other)
 
bool operator== (Extent< T, N > const &other) const
 Standard equality comparison. More...
 
bool operator!= (Extent< T, N > const &other) const
 Standard inequality comparison. More...
 
Point< T, N > asPoint () const
 Cast this object to an Extent of the same numeric type and dimensionality. More...
 
std::string toString () const
 
T & operator[] (int n)
 
T const & operator[] (int n) const
 
T & coeffRef (int n)
 
T const & coeffRef (int n) const
 
EigenVector const & asEigen () const
 Return a fixed-size Eigen representation of the coordinate object. More...
 
Named comparison functions

Note that these return CoordinateExpr, not bool.

Unlike most arithmetic and assignment operators, scalar interoperability is provided for comparisons; expressions like

if (all(extent.gt(0))) ...

are both ubiquitous and easy to interpret.

CoordinateExpr< N > eq (Extent< T, N > const &other) const
 
CoordinateExpr< N > eq (T scalar) const
 
CoordinateExpr< N > ne (Extent< T, N > const &other) const
 
CoordinateExpr< N > ne (T scalar) const
 
CoordinateExpr< N > lt (Extent< T, N > const &other) const
 
CoordinateExpr< N > lt (T scalar) const
 
CoordinateExpr< N > le (Extent< T, N > const &other) const
 
CoordinateExpr< N > le (T scalar) const
 
CoordinateExpr< N > gt (Extent< T, N > const &other) const
 
CoordinateExpr< N > gt (T scalar) const
 
CoordinateExpr< N > ge (Extent< T, N > const &other) const
 
CoordinateExpr< N > ge (T scalar) const
 
Additive arithmetic operators

No scalar interoperability is provided for Extent additive arithmetic operations.

Point< T, N > operator+ (Point< T, N > const &other) const
 
Extent< T, N > operator+ (Extent< T, N > const &other) const
 
Extent< T, N > operator+ () const
 
Extent< T, N > operator- (Extent< T, N > const &other) const
 
Extent< T, N > operator- () const
 
Extent< T, N > & operator+= (Extent< T, N > const &other)
 
Extent< T, N > & operator-= (Extent< T, N > const &other)
 
Multiplicative arithmetic operators

As usual with matrices and vectors, Extent can be multiplied or divided by a scalar.

Extent< T, N > operator* (T scalar) const
 
Extent< T, N > & operator*= (T scalar)
 
Extent< T, N > operator/ (T scalar) const
 
Extent< T, N > & operator/= (T scalar)
 

Static Public Attributes

static int const dimensions
 

Protected Member Functions

void _swap (CoordinateBase &other)
 

Protected Attributes

EigenVector _vector
 

Related Functions

(Note that these are not member functions.)

bool allclose (CoordinateBase< Extent< T, N >, T, N > const &a, CoordinateBase< Extent< T, N >, T, N > const &b, T rtol=static_cast< T >(1E-5), T atol=static_cast< T >(1E-8))
 Floating-point comparison with tolerance. More...
 

Detailed Description

template<typename T, int N>
class lsst::afw::geom::Extent< T, N >

A coordinate class intended to represent offsets and dimensions.

Much of the functionality of Extent is provided by its CRTP base class, ExtentBase.

See Operators on Point and Extent for mathematical operators on Extent.

Definition at line 44 of file CoordinateBase.h.

Member Typedef Documentation

◆ EigenVector

template<typename T, int N>
typedef Super::EigenVector lsst::afw::geom::Extent< T, N >::EigenVector

Definition at line 197 of file Extent.h.

◆ Element

typedef T lsst::afw::geom::CoordinateBase< Extent< T, N > , T, N >::Element
inherited

Definition at line 54 of file CoordinateBase.h.

Constructor & Destructor Documentation

◆ Extent() [1/7]

template<typename T, int N>
lsst::afw::geom::Extent< T, N >::Extent ( val = static_cast<T>(0))
inlineexplicit

Construct an Extent with all elements set to the same scalar value.

Definition at line 200 of file Extent.h.

200 : Super(val) {}
ImageT val
Definition: CR.cc:158

◆ Extent() [2/7]

template<typename T, int N>
lsst::afw::geom::Extent< T, N >::Extent ( EigenVector const &  vector)
inlineexplicit

Construct an Extent from an Eigen vector.

Definition at line 203 of file Extent.h.

203 : Super(vector) {}

◆ Extent() [3/7]

template<typename T, int N>
lsst::afw::geom::Extent< T, N >::Extent ( Point< T, N > const &  other)
explicit

Explicit constructor from Point.

Definition at line 32 of file Extent.cc.

32 : Super(other.asEigen()) {}
ItemVariant const * other
Definition: Schema.cc:55

◆ Extent() [4/7]

template<typename T, int N>
template<typename U >
lsst::afw::geom::Extent< T, N >::Extent ( Extent< U, N > const &  other)
explicit

Explicit constructor from Extent of different type (if allowed)

◆ Extent() [5/7]

template<typename T, int N>
template<typename U >
lsst::afw::geom::Extent< T, N >::Extent ( Point< U, N > const &  other)
explicit

◆ Extent() [6/7]

template<typename T, int N>
lsst::afw::geom::Extent< T, N >::Extent ( Extent< T, N > const &  other)

◆ Extent() [7/7]

template<typename T, int N>
lsst::afw::geom::Extent< T, N >::Extent ( Extent< T, N > &&  other)

◆ ~Extent()

template<typename T, int N>
lsst::afw::geom::Extent< T, N >::~Extent ( )
default

Member Function Documentation

◆ _swap()

void lsst::afw::geom::CoordinateBase< Extent< T, N > , T, N >::_swap ( CoordinateBase< Extent< T, N >, T, N > &  other)
inlineprotectedinherited

Definition at line 93 of file CoordinateBase.h.

93 { _vector.swap(other._vector); }
ItemVariant const * other
Definition: Schema.cc:55

◆ asEigen()

EigenVector const& lsst::afw::geom::CoordinateBase< Extent< T, N > , T, N >::asEigen ( ) const
inlineinherited

Return a fixed-size Eigen representation of the coordinate object.

The fact that this returns by const reference rather than by value should not be considered part of the API; this is merely an optimization enabled by the implementation.

Definition at line 75 of file CoordinateBase.h.

◆ asPoint()

template<typename T , int N>
Point< T, N > lsst::afw::geom::ExtentBase< T, N >::asPoint ( ) const
inherited

Cast this object to an Extent of the same numeric type and dimensionality.

Definition at line 87 of file Extent.cc.

87  {
88  return Point<T, N>(static_cast<Extent<T, N> const &>(*this));
89 }

◆ coeffRef() [1/2]

T& lsst::afw::geom::CoordinateBase< Extent< T, N > , T, N >::coeffRef ( int  n)
inlineinherited

Definition at line 66 of file CoordinateBase.h.

66 { return _vector.coeffRef(n); }

◆ coeffRef() [2/2]

T const& lsst::afw::geom::CoordinateBase< Extent< T, N > , T, N >::coeffRef ( int  n) const
inlineinherited

◆ computeNorm()

template<typename T, int N>
T lsst::afw::geom::Extent< T, N >::computeNorm ( ) const
inline

Return the L2 norm of the Extent (sqrt(x^2 + y^2 + ...)).

Definition at line 225 of file Extent.h.

225 { return this->asEigen().norm(); }
EigenVector const & asEigen() const
Return a fixed-size Eigen representation of the coordinate object.

◆ computeSquaredNorm()

template<typename T, int N>
T lsst::afw::geom::Extent< T, N >::computeSquaredNorm ( ) const
inline

Return the squared L2 norm of the Extent (x^2 + y^2 + ...).

Definition at line 222 of file Extent.h.

222 { return this->asEigen().squaredNorm(); }
EigenVector const & asEigen() const
Return a fixed-size Eigen representation of the coordinate object.

◆ eq() [1/2]

template<typename T, int N>
CoordinateExpr< N > lsst::afw::geom::ExtentBase< T, N >::eq ( Extent< T, N > const &  other) const
inherited

Definition at line 45 of file Extent.cc.

45  {
46  CoordinateExpr<N> r;
47  for (int n = 0; n < N; ++n) r[n] = this->_vector[n] == other[n];
48  return r;
49 }
ItemVariant const * other
Definition: Schema.cc:55

◆ eq() [2/2]

template<typename T, int N>
CoordinateExpr<N> lsst::afw::geom::ExtentBase< T, N >::eq ( scalar) const
inlineinherited

Definition at line 109 of file Extent.h.

109 { return this->eq(Extent<T, N>(scalar)); }
CoordinateExpr< N > eq(Extent< T, N > const &other) const
Definition: Extent.cc:45

◆ ge() [1/2]

template<typename T, int N>
CoordinateExpr< N > lsst::afw::geom::ExtentBase< T, N >::ge ( Extent< T, N > const &  other) const
inherited

Definition at line 80 of file Extent.cc.

80  {
81  CoordinateExpr<N> r;
82  for (int n = 0; n < N; ++n) r[n] = this->_vector[n] >= other[n];
83  return r;
84 }
ItemVariant const * other
Definition: Schema.cc:55

◆ ge() [2/2]

template<typename T, int N>
CoordinateExpr<N> lsst::afw::geom::ExtentBase< T, N >::ge ( scalar) const
inlineinherited

Definition at line 114 of file Extent.h.

114 { return this->ge(Extent<T, N>(scalar)); }
CoordinateExpr< N > ge(Extent< T, N > const &other) const
Definition: Extent.cc:80

◆ gt() [1/2]

template<typename T, int N>
CoordinateExpr< N > lsst::afw::geom::ExtentBase< T, N >::gt ( Extent< T, N > const &  other) const
inherited

Definition at line 73 of file Extent.cc.

73  {
74  CoordinateExpr<N> r;
75  for (int n = 0; n < N; ++n) r[n] = this->_vector[n] > other[n];
76  return r;
77 }
ItemVariant const * other
Definition: Schema.cc:55

◆ gt() [2/2]

template<typename T, int N>
CoordinateExpr<N> lsst::afw::geom::ExtentBase< T, N >::gt ( scalar) const
inlineinherited

Definition at line 113 of file Extent.h.

113 { return this->gt(Extent<T, N>(scalar)); }
CoordinateExpr< N > gt(Extent< T, N > const &other) const
Definition: Extent.cc:73

◆ le() [1/2]

template<typename T, int N>
CoordinateExpr< N > lsst::afw::geom::ExtentBase< T, N >::le ( Extent< T, N > const &  other) const
inherited

Definition at line 66 of file Extent.cc.

66  {
67  CoordinateExpr<N> r;
68  for (int n = 0; n < N; ++n) r[n] = this->_vector[n] <= other[n];
69  return r;
70 }
ItemVariant const * other
Definition: Schema.cc:55

◆ le() [2/2]

template<typename T, int N>
CoordinateExpr<N> lsst::afw::geom::ExtentBase< T, N >::le ( scalar) const
inlineinherited

Definition at line 112 of file Extent.h.

112 { return this->le(Extent<T, N>(scalar)); }
CoordinateExpr< N > le(Extent< T, N > const &other) const
Definition: Extent.cc:66

◆ lt() [1/2]

template<typename T, int N>
CoordinateExpr< N > lsst::afw::geom::ExtentBase< T, N >::lt ( Extent< T, N > const &  other) const
inherited

Definition at line 59 of file Extent.cc.

59  {
60  CoordinateExpr<N> r;
61  for (int n = 0; n < N; ++n) r[n] = this->_vector[n] < other[n];
62  return r;
63 }
ItemVariant const * other
Definition: Schema.cc:55

◆ lt() [2/2]

template<typename T, int N>
CoordinateExpr<N> lsst::afw::geom::ExtentBase< T, N >::lt ( scalar) const
inlineinherited

Definition at line 111 of file Extent.h.

111 { return this->lt(Extent<T, N>(scalar)); }
CoordinateExpr< N > lt(Extent< T, N > const &other) const
Definition: Extent.cc:59

◆ ne() [1/2]

template<typename T, int N>
CoordinateExpr< N > lsst::afw::geom::ExtentBase< T, N >::ne ( Extent< T, N > const &  other) const
inherited

Definition at line 52 of file Extent.cc.

52  {
53  CoordinateExpr<N> r;
54  for (int n = 0; n < N; ++n) r[n] = this->_vector[n] != other[n];
55  return r;
56 }
ItemVariant const * other
Definition: Schema.cc:55

◆ ne() [2/2]

template<typename T, int N>
CoordinateExpr<N> lsst::afw::geom::ExtentBase< T, N >::ne ( scalar) const
inlineinherited

Definition at line 110 of file Extent.h.

110 { return this->ne(Extent<T, N>(scalar)); }
CoordinateExpr< N > ne(Extent< T, N > const &other) const
Definition: Extent.cc:52

◆ operator!=()

template<typename T, int N>
bool lsst::afw::geom::ExtentBase< T, N >::operator!= ( Extent< T, N > const &  other) const
inlineinherited

Standard inequality comparison.

Returns true iff any(this->ne(other));

Definition at line 88 of file Extent.h.

88 { return any(this->ne(other)); }
CoordinateExpr< N > ne(Extent< T, N > const &other) const
Definition: Extent.cc:52
bool any(CoordinateExpr< N > const &expr)
Return true if any elements are true.
ItemVariant const * other
Definition: Schema.cc:55

◆ operator*()

template<typename T, int N>
Extent<T, N> lsst::afw::geom::ExtentBase< T, N >::operator* ( scalar) const
inlineinherited

Definition at line 148 of file Extent.h.

148 { return Extent<T, N>(this->_vector * scalar); }

◆ operator*=()

template<typename T, int N>
Extent<T, N>& lsst::afw::geom::ExtentBase< T, N >::operator*= ( scalar)
inlineinherited

Definition at line 149 of file Extent.h.

149  {
150  this->_vector *= scalar;
151  return static_cast<Extent<T, N> &>(*this);
152  }

◆ operator+() [1/3]

template<typename T, int N>
Point< T, N > lsst::afw::geom::ExtentBase< T, N >::operator+ ( Point< T, N > const &  other) const
inherited

Definition at line 92 of file Extent.cc.

92  {
93  return Point<T, N>(this->_vector + other.asEigen());
94 }
ItemVariant const * other
Definition: Schema.cc:55

◆ operator+() [2/3]

template<typename T, int N>
Extent<T, N> lsst::afw::geom::ExtentBase< T, N >::operator+ ( Extent< T, N > const &  other) const
inlineinherited

Definition at line 124 of file Extent.h.

124  {
125  return Extent<T, N>(this->_vector + other._vector);
126  }
ItemVariant const * other
Definition: Schema.cc:55

◆ operator+() [3/3]

template<typename T, int N>
Extent<T, N> lsst::afw::geom::ExtentBase< T, N >::operator+ ( ) const
inlineinherited

Definition at line 138 of file Extent.h.

138 { return static_cast<Extent<T, N> const &>(*this); }

◆ operator+=()

template<typename T, int N>
Extent<T, N>& lsst::afw::geom::ExtentBase< T, N >::operator+= ( Extent< T, N > const &  other)
inlineinherited

Definition at line 130 of file Extent.h.

130  {
131  this->_vector += other._vector;
132  return static_cast<Extent<T, N> &>(*this);
133  }
ItemVariant const * other
Definition: Schema.cc:55

◆ operator-() [1/2]

template<typename T, int N>
Extent<T, N> lsst::afw::geom::ExtentBase< T, N >::operator- ( Extent< T, N > const &  other) const
inlineinherited

Definition at line 127 of file Extent.h.

127  {
128  return Extent<T, N>(this->_vector - other._vector);
129  }
ItemVariant const * other
Definition: Schema.cc:55

◆ operator-() [2/2]

template<typename T, int N>
Extent<T, N> lsst::afw::geom::ExtentBase< T, N >::operator- ( ) const
inlineinherited

Definition at line 139 of file Extent.h.

139 { return Extent<T, N>(-this->_vector); }

◆ operator-=()

template<typename T, int N>
Extent<T, N>& lsst::afw::geom::ExtentBase< T, N >::operator-= ( Extent< T, N > const &  other)
inlineinherited

Definition at line 134 of file Extent.h.

134  {
135  this->_vector -= other._vector;
136  return static_cast<Extent<T, N> &>(*this);
137  }
ItemVariant const * other
Definition: Schema.cc:55

◆ operator/()

template<typename T, int N>
Extent<T, N> lsst::afw::geom::ExtentBase< T, N >::operator/ ( scalar) const
inlineinherited

Definition at line 153 of file Extent.h.

153 { return Extent<T, N>(this->_vector / scalar); }

◆ operator/=()

template<typename T, int N>
Extent<T, N>& lsst::afw::geom::ExtentBase< T, N >::operator/= ( scalar)
inlineinherited

Definition at line 154 of file Extent.h.

154  {
155  this->_vector /= scalar;
156  return static_cast<Extent<T, N> &>(*this);
157  }

◆ operator=() [1/2]

template<typename T, int N>
Extent& lsst::afw::geom::Extent< T, N >::operator= ( Extent< T, N > const &  other)
default

◆ operator=() [2/2]

template<typename T, int N>
Extent& lsst::afw::geom::Extent< T, N >::operator= ( Extent< T, N > &&  other)
default

◆ operator==()

template<typename T, int N>
bool lsst::afw::geom::ExtentBase< T, N >::operator== ( Extent< T, N > const &  other) const
inlineinherited

Standard equality comparison.

Returns true iff all(this->eq(other));

Definition at line 81 of file Extent.h.

81 { return all(this->eq(other)); }
bool all(CoordinateExpr< N > const &expr)
Return true if all elements are true.
CoordinateExpr< N > eq(Extent< T, N > const &other) const
Definition: Extent.cc:45
ItemVariant const * other
Definition: Schema.cc:55

◆ operator[]() [1/2]

T& lsst::afw::geom::CoordinateBase< Extent< T, N > , T, N >::operator[] ( int  n)
inlineinherited

Definition at line 64 of file CoordinateBase.h.

◆ operator[]() [2/2]

T const& lsst::afw::geom::CoordinateBase< Extent< T, N > , T, N >::operator[] ( int  n) const
inlineinherited

Definition at line 65 of file CoordinateBase.h.

65 { return const_cast<EigenVector&>(_vector)[n]; }
Eigen::Matrix< T, N, 1, Eigen::DontAlign > EigenVector

◆ swap()

template<typename T, int N>
void lsst::afw::geom::Extent< T, N >::swap ( Extent< T, N > &  other)
inline

Definition at line 227 of file Extent.h.

227 { this->_swap(other); }
ItemVariant const * other
Definition: Schema.cc:55

◆ toString()

template<typename T, int N>
std::string lsst::afw::geom::ExtentBase< T, N >::toString ( ) const
inlineinherited

Definition at line 163 of file Extent.h.

163  {
164  std::stringstream out;
165  out << "Extent(";
166  for (size_t i = 0; i < N; ++i) {
167  if (i != 0) {
168  out << ",";
169  }
170  out << (*this)[i];
171  }
172  out << ")";
173  return out.str();
174  }
T str(T... args)

Friends And Related Function Documentation

◆ allclose()

bool allclose ( CoordinateBase< Extent< T, N > , T, N > const &  a,
CoordinateBase< Extent< T, N > , T, N > const &  b,
rtol = static_cast<T>(1E-5),
atol = static_cast<T>(1E-8) 
)
related

Floating-point comparison with tolerance.

Interface, naming, and default tolerances matches Numpy.

Definition at line 32 of file CoordinateBase.cc.

33  {
34  Eigen::Array<T, N, 1> diff = (a.asEigen().array() - b.asEigen().array()).abs();
35  Eigen::Array<T, N, 1> rhs = (0.5 * (a.asEigen().array() + b.asEigen().array())).abs();
36  rhs *= rtol;
37  rhs += atol;
38  return (diff <= rhs).all();
39 }
T atol(T... args)
Angle abs(Angle const &a)
Definition: Angle.h:106
table::Key< int > b
table::Key< int > a

Member Data Documentation

◆ _vector

EigenVector lsst::afw::geom::CoordinateBase< Extent< T, N > , T, N >::_vector
protectedinherited

Definition at line 94 of file CoordinateBase.h.

◆ dimensions

int const lsst::afw::geom::CoordinateBase< Extent< T, N > , T, N >::dimensions
staticinherited

Definition at line 55 of file CoordinateBase.h.


The documentation for this class was generated from the following files: