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::Point< T, N > Class Template Reference

A coordinate class intended to represent absolute positions. More...

#include <CoordinateBase.h>

Inheritance diagram for lsst::afw::geom::Point< T, N >:
lsst::afw::geom::PointBase< T, N > lsst::afw::geom::CoordinateBase< Point< T, N >, T, N >

Public Types

typedef Super::EigenVector EigenVector
 
typedef T Element
 

Public Member Functions

 Point (T val=static_cast< T >(0))
 Construct a Point with all elements set to the same scalar value. More...
 
 Point (Point const &)=default
 
 Point (Point &&)=default
 
 ~Point ()=default
 
Pointoperator= (Point const &)=default
 
Pointoperator= (Point &&)=default
 
template<typename U >
 Point (Point< U, N > const &other)
 Explicit converting constructor. More...
 
 Point (EigenVector const &vector)
 Construct a Point from an Eigen vector. More...
 
 Point (Extent< T, N > const &other)
 Explicit constructor from Extent. More...
 
void swap (Point &other)
 
bool operator== (Point< T, N > const &other) const
 Standard equality comparison. More...
 
bool operator!= (Point< T, N > const &other) const
 Standard inequality comparison. More...
 
Extent< T, N > asExtent () const
 Cast this object to an Extent of the same numeric type and dimensionality. More...
 
void shift (Extent< T, N > const &offset)
 Shift the point by the given offset. More...
 
void scale (double factor)
 
double distanceSquared (PointBase< T, N > const &other) const
 
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 vectorized 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(point.gt(0))) ...

are both ubiquitous and easy to interpret.

CoordinateExpr< N > eq (Point< T, N > const &other) const
 
CoordinateExpr< N > eq (T scalar) const
 
CoordinateExpr< N > ne (Point< T, N > const &other) const
 
CoordinateExpr< N > ne (T scalar) const
 
CoordinateExpr< N > lt (Point< T, N > const &other) const
 
CoordinateExpr< N > lt (T scalar) const
 
CoordinateExpr< N > le (Point< T, N > const &other) const
 
CoordinateExpr< N > le (T scalar) const
 
CoordinateExpr< N > gt (Point< T, N > const &other) const
 
CoordinateExpr< N > gt (T scalar) const
 
CoordinateExpr< N > ge (Point< T, N > const &other) const
 
CoordinateExpr< N > ge (T scalar) const
 
Arithmetic operators

No scalar interoperability is provided for Point arithmetic operations.

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

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< Point< T, N >, T, N > const &a, CoordinateBase< Point< 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::Point< T, N >

A coordinate class intended to represent absolute positions.

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

Definition at line 42 of file CoordinateBase.h.

Member Typedef Documentation

◆ EigenVector

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

Definition at line 161 of file Point.h.

◆ Element

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

Definition at line 54 of file CoordinateBase.h.

Constructor & Destructor Documentation

◆ Point() [1/6]

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

Construct a Point with all elements set to the same scalar value.

Definition at line 164 of file Point.h.

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

◆ Point() [2/6]

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

◆ Point() [3/6]

template<typename T, int N>
lsst::afw::geom::Point< T, N >::Point ( Point< T, N > &&  )
default

◆ ~Point()

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

◆ Point() [4/6]

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

Explicit converting constructor.

Converting from floating point to integer rounds to the nearest integer instead of truncating. This ensures that a floating-point pixel coordinate converts to the coordinate of the pixel it lies on (assuming the floating point origin is the center of the first pixel).

Definition at line 55 of file Point.cc.

55  : Super() {
56  for (int n = 0; n < N; ++n) {
57  this->_vector[n] = detail::PointSpecialized<T>::template convert<U>(other[n]);
58  }
59 }
ItemVariant const * other
Definition: Schema.cc:55

◆ Point() [5/6]

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

Construct a Point from an Eigen vector.

Definition at line 184 of file Point.h.

184 : Super(vector) {}

◆ Point() [6/6]

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

Explicit constructor from Extent.

Definition at line 187 of file Point.h.

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

Member Function Documentation

◆ _swap()

void lsst::afw::geom::CoordinateBase< Point< T, N > , T, N >::_swap ( CoordinateBase< Point< 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< Point< 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.

◆ asExtent()

template<typename T, int N>
Extent<T, N> lsst::afw::geom::PointBase< T, N >::asExtent ( ) const
inlineinherited

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

Definition at line 119 of file Point.h.

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

◆ coeffRef() [1/2]

T& lsst::afw::geom::CoordinateBase< Point< 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< Point< T, N > , T, N >::coeffRef ( int  n) const
inlineinherited

Definition at line 67 of file CoordinateBase.h.

◆ distanceSquared()

template<typename T, int N>
double lsst::afw::geom::PointBase< T, N >::distanceSquared ( PointBase< T, N > const &  other) const
inlineinherited

Definition at line 126 of file Point.h.

126  {
127  // the cast to double is lame but Eigen seems to require they be the same type
128  return (this->asEigen() - other.asEigen()).squaredNorm();
129  }
EigenVector const & asEigen() const
Return a fixed-size Eigen representation of the coordinate object.
ItemVariant const * other
Definition: Schema.cc:55

◆ eq() [1/2]

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

Definition at line 78 of file Point.cc.

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

◆ eq() [2/2]

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

Definition at line 85 of file Point.h.

85 { return this->eq(Point<T, N>(scalar)); }
CoordinateExpr< N > eq(Point< T, N > const &other) const
Definition: Point.cc:78

◆ ge() [1/2]

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

Definition at line 113 of file Point.cc.

113  {
114  CoordinateExpr<N> r;
115  for (int n = 0; n < N; ++n) r[n] = this->_vector[n] >= other[n];
116  return r;
117 }
ItemVariant const * other
Definition: Schema.cc:55

◆ ge() [2/2]

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

Definition at line 90 of file Point.h.

90 { return this->ge(Point<T, N>(scalar)); }
CoordinateExpr< N > ge(Point< T, N > const &other) const
Definition: Point.cc:113

◆ gt() [1/2]

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

Definition at line 106 of file Point.cc.

106  {
107  CoordinateExpr<N> r;
108  for (int n = 0; n < N; ++n) r[n] = this->_vector[n] > other[n];
109  return r;
110 }
ItemVariant const * other
Definition: Schema.cc:55

◆ gt() [2/2]

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

Definition at line 89 of file Point.h.

89 { return this->gt(Point<T, N>(scalar)); }
CoordinateExpr< N > gt(Point< T, N > const &other) const
Definition: Point.cc:106

◆ le() [1/2]

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

Definition at line 99 of file Point.cc.

99  {
100  CoordinateExpr<N> r;
101  for (int n = 0; n < N; ++n) r[n] = this->_vector[n] <= other[n];
102  return r;
103 }
ItemVariant const * other
Definition: Schema.cc:55

◆ le() [2/2]

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

Definition at line 88 of file Point.h.

88 { return this->le(Point<T, N>(scalar)); }
CoordinateExpr< N > le(Point< T, N > const &other) const
Definition: Point.cc:99

◆ lt() [1/2]

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

Definition at line 92 of file Point.cc.

92  {
93  CoordinateExpr<N> r;
94  for (int n = 0; n < N; ++n) r[n] = this->_vector[n] < other[n];
95  return r;
96 }
ItemVariant const * other
Definition: Schema.cc:55

◆ lt() [2/2]

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

Definition at line 87 of file Point.h.

87 { return this->lt(Point<T, N>(scalar)); }
CoordinateExpr< N > lt(Point< T, N > const &other) const
Definition: Point.cc:92

◆ ne() [1/2]

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

Definition at line 85 of file Point.cc.

85  {
86  CoordinateExpr<N> r;
87  for (int n = 0; n < N; ++n) r[n] = this->_vector[n] != other[n];
88  return r;
89 }
ItemVariant const * other
Definition: Schema.cc:55

◆ ne() [2/2]

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

Definition at line 86 of file Point.h.

86 { return this->ne(Point<T, N>(scalar)); }
CoordinateExpr< N > ne(Point< T, N > const &other) const
Definition: Point.cc:85

◆ operator!=()

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

Standard inequality comparison.

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

Definition at line 64 of file Point.h.

64 { return any(this->ne(other)); }
CoordinateExpr< N > ne(Point< T, N > const &other) const
Definition: Point.cc:85
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>
Point<T, N> lsst::afw::geom::PointBase< T, N >::operator+ ( Extent< T, N > const &  other) const
inlineinherited

Definition at line 102 of file Point.h.

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

◆ operator+=()

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

Definition at line 108 of file Point.h.

108  {
109  this->_vector += other.asEigen();
110  return static_cast<Point<T, N> &>(*this);
111  }
ItemVariant const * other
Definition: Schema.cc:55

◆ operator-() [1/2]

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

Definition at line 99 of file Point.h.

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

◆ operator-() [2/2]

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

Definition at line 105 of file Point.h.

105  {
106  return Point<T, N>(this->_vector - other.asEigen());
107  }
ItemVariant const * other
Definition: Schema.cc:55

◆ operator-=()

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

Definition at line 112 of file Point.h.

112  {
113  this->_vector -= other.asEigen();
114  return static_cast<Point<T, N> &>(*this);
115  }
ItemVariant const * other
Definition: Schema.cc:55

◆ operator=() [1/2]

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

◆ operator=() [2/2]

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

◆ operator==()

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

Standard equality comparison.

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

Definition at line 57 of file Point.h.

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

◆ operator[]() [1/2]

T& lsst::afw::geom::CoordinateBase< Point< 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< Point< 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

◆ scale()

template<typename T, int N>
void lsst::afw::geom::PointBase< T, N >::scale ( double  factor)
inlineinherited

Definition at line 124 of file Point.h.

◆ shift()

template<typename T, int N>
void lsst::afw::geom::PointBase< T, N >::shift ( Extent< T, N > const &  offset)
inlineinherited

Shift the point by the given offset.

Definition at line 122 of file Point.h.

122 { this->_vector += offset.asEigen(); }

◆ swap()

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

Definition at line 189 of file Point.h.

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

◆ toString()

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

Definition at line 131 of file Point.h.

131  {
132  std::stringstream out;
133  out << "Point(";
134  for (size_t i = 0; i < N; ++i) {
135  if (i != 0) {
136  out << ",";
137  }
138  out << (*this)[i];
139  }
140  out << ")";
141  return out.str();
142  }
T str(T... args)

Friends And Related Function Documentation

◆ allclose()

bool allclose ( CoordinateBase< Point< T, N > , T, N > const &  a,
CoordinateBase< Point< 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< Point< T, N > , T, N >::_vector
protectedinherited

Definition at line 94 of file CoordinateBase.h.

◆ dimensions

int const lsst::afw::geom::CoordinateBase< Point< 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: