LSST Applications  21.0.0-172-gfb10e10a+18fedfabac,22.0.0+297cba6710,22.0.0+80564b0ff1,22.0.0+8d77f4f51a,22.0.0+a28f4c53b1,22.0.0+dcf3732eb2,22.0.1-1-g7d6de66+2a20fdde0d,22.0.1-1-g8e32f31+297cba6710,22.0.1-1-geca5380+7fa3b7d9b6,22.0.1-12-g44dc1dc+2a20fdde0d,22.0.1-15-g6a90155+515f58c32b,22.0.1-16-g9282f48+790f5f2caa,22.0.1-2-g92698f7+dcf3732eb2,22.0.1-2-ga9b0f51+7fa3b7d9b6,22.0.1-2-gd1925c9+bf4f0e694f,22.0.1-24-g1ad7a390+a9625a72a8,22.0.1-25-g5bf6245+3ad8ecd50b,22.0.1-25-gb120d7b+8b5510f75f,22.0.1-27-g97737f7+2a20fdde0d,22.0.1-32-gf62ce7b1+aa4237961e,22.0.1-4-g0b3f228+2a20fdde0d,22.0.1-4-g243d05b+871c1b8305,22.0.1-4-g3a563be+32dcf1063f,22.0.1-4-g44f2e3d+9e4ab0f4fa,22.0.1-42-gca6935d93+ba5e5ca3eb,22.0.1-5-g15c806e+85460ae5f3,22.0.1-5-g58711c4+611d128589,22.0.1-5-g75bb458+99c117b92f,22.0.1-6-g1c63a23+7fa3b7d9b6,22.0.1-6-g50866e6+84ff5a128b,22.0.1-6-g8d3140d+720564cf76,22.0.1-6-gd805d02+cc5644f571,22.0.1-8-ge5750ce+85460ae5f3,master-g6e05de7fdc+babf819c66,master-g99da0e417a+8d77f4f51a,w.2021.48
LSST Data Management Base Package
Public Types | Public Member Functions | Static Public Attributes | Protected Member Functions | Protected Attributes | Related Functions | List of all members
lsst::geom::PointBase< T, N > Class Template Reference

#include <Point.h>

Inheritance diagram for lsst::geom::PointBase< T, N >:
lsst::geom::CoordinateBase< Point< T, N >, T, N > lsst::geom::Point< double, 2 > lsst::geom::Point< int, 2 > lsst::geom::Point< T, N >

Public Types

typedef T Element
 
typedef Eigen::Matrix< T, N, 1, Eigen::DontAlign > EigenVector
 

Public Member Functions

 PointBase (PointBase const &)=default
 
 PointBase (PointBase &&)=default
 
PointBaseoperator= (PointBase const &)=default
 
PointBaseoperator= (PointBase &&)=default
 
 ~PointBase ()=default
 
bool operator== (Point< T, N > const &other) const noexcept
 Standard equality comparison. More...
 
bool operator!= (Point< T, N > const &other) const noexcept
 Standard inequality comparison. More...
 
T & operator[] (int n)
 
T const & operator[] (int n) const
 
T & coeffRef (int n)
 
T const & coeffRef (int n) const
 
EigenVector const & asEigen () const noexcept(IS_ELEMENT_NOTHROW_COPYABLE)
 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 noexcept
 
CoordinateExpr< N > ne (Point< T, N > const &other) const noexcept
 
CoordinateExpr< N > lt (Point< T, N > const &other) const noexcept
 
CoordinateExpr< N > le (Point< T, N > const &other) const noexcept
 
CoordinateExpr< N > gt (Point< T, N > const &other) const noexcept
 
CoordinateExpr< N > ge (Point< T, N > const &other) const noexcept
 
CoordinateExpr< N > eq (T scalar) const noexcept(Super::IS_ELEMENT_NOTHROW_COPYABLE)
 
CoordinateExpr< N > ne (T scalar) const noexcept(Super::IS_ELEMENT_NOTHROW_COPYABLE)
 
CoordinateExpr< N > lt (T scalar) const noexcept(Super::IS_ELEMENT_NOTHROW_COPYABLE)
 
CoordinateExpr< N > le (T scalar) const noexcept(Super::IS_ELEMENT_NOTHROW_COPYABLE)
 
CoordinateExpr< N > gt (T scalar) const noexcept(Super::IS_ELEMENT_NOTHROW_COPYABLE)
 
CoordinateExpr< N > ge (T scalar) const noexcept(Super::IS_ELEMENT_NOTHROW_COPYABLE)
 

Static Public Attributes

static int const dimensions
 
static constexpr bool IS_ELEMENT_NOTHROW_COPYABLE
 
static constexpr bool IS_ELEMENT_NOTHROW_ASSIGNABLE
 

Protected Member Functions

void _swap (CoordinateBase &other) noexcept
 

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)) noexcept(std::is_nothrow_copy_constructible< T >::value &&std::is_nothrow_copy_assignable< T >::value)
 Floating-point comparison with tolerance. More...
 

Arithmetic operators

No scalar interoperability is provided for Point arithmetic operations.

Extent< T, N > operator- (Point< T, N > const &other) const noexcept(Super::IS_ELEMENT_NOTHROW_COPYABLE)
 Cast this object to an Extent of the same numeric type and dimensionality. More...
 
Point< T, N > operator+ (Extent< T, N > const &other) const noexcept(Super::IS_ELEMENT_NOTHROW_COPYABLE)
 Cast this object to an Extent of the same numeric type and dimensionality. More...
 
Point< T, N > operator- (Extent< T, N > const &other) const noexcept(Super::IS_ELEMENT_NOTHROW_COPYABLE)
 Cast this object to an Extent of the same numeric type and dimensionality. More...
 
Point< T, N > & operator+= (Extent< T, N > const &other) noexcept(Super::IS_ELEMENT_NOTHROW_ASSIGNABLE)
 Cast this object to an Extent of the same numeric type and dimensionality. More...
 
Point< T, N > & operator-= (Extent< T, N > const &other) noexcept(Super::IS_ELEMENT_NOTHROW_ASSIGNABLE)
 Cast this object to an Extent of the same numeric type and dimensionality. More...
 
Extent< T, N > asExtent () const noexcept(Super::IS_ELEMENT_NOTHROW_COPYABLE)
 Cast this object to an Extent of the same numeric type and dimensionality. More...
 
void shift (Extent< T, N > const &offset) noexcept(Super::IS_ELEMENT_NOTHROW_COPYABLE)
 Shift the point by the given offset. More...
 
void scale (double factor) noexcept(Super::IS_ELEMENT_NOTHROW_COPYABLE)
 Cast this object to an Extent of the same numeric type and dimensionality. More...
 
double distanceSquared (PointBase< T, N > const &other) const noexcept(Super::IS_ELEMENT_NOTHROW_COPYABLE)
 Cast this object to an Extent of the same numeric type and dimensionality. More...
 
std::string toString () const
 Cast this object to an Extent of the same numeric type and dimensionality. More...
 
 PointBase (T val=static_cast< T >(0)) noexcept(Super::IS_ELEMENT_NOTHROW_COPYABLE)
 Cast this object to an Extent of the same numeric type and dimensionality. More...
 
template<typename Vector >
 PointBase (Eigen::MatrixBase< Vector > const &vector)
 Cast this object to an Extent of the same numeric type and dimensionality. More...
 

Detailed Description

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

Definition at line 38 of file Point.h.

Member Typedef Documentation

◆ EigenVector

typedef Eigen::Matrix<T, N, 1, Eigen::DontAlign> lsst::geom::CoordinateBase< Point< T, N > , T, N >::EigenVector
inherited

Definition at line 59 of file CoordinateBase.h.

◆ Element

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

Definition at line 57 of file CoordinateBase.h.

Constructor & Destructor Documentation

◆ PointBase() [1/4]

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

◆ PointBase() [2/4]

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

◆ ~PointBase()

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

◆ PointBase() [3/4]

template<typename T , int N>
lsst::geom::PointBase< T, N >::PointBase ( val = static_cast<T>(0))
inlineexplicitprotectednoexcept

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

Definition at line 157 of file Point.h.

157 : Super(val) {}
ImageT val
Definition: CR.cc:146

◆ PointBase() [4/4]

template<typename T , int N>
template<typename Vector >
lsst::geom::PointBase< T, N >::PointBase ( Eigen::MatrixBase< Vector > const &  vector)
inlineexplicitprotected

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

Definition at line 160 of file Point.h.

160 : Super(vector) {}

Member Function Documentation

◆ _swap()

void lsst::geom::CoordinateBase< Point< T, N > , T, N >::_swap ( CoordinateBase< Point< T, N >, T, N > &  other)
inlineprotectednoexceptinherited

Definition at line 108 of file CoordinateBase.h.

108 { _vector.swap(other._vector); }

◆ asEigen()

EigenVector const& lsst::geom::CoordinateBase< Point< T, N > , T, N >::asEigen ( ) const
inlinenoexceptinherited

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 89 of file CoordinateBase.h.

89 { return _vector; }

◆ asExtent()

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

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

Definition at line 127 of file Point.h.

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

◆ coeffRef() [1/2]

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

Definition at line 80 of file CoordinateBase.h.

80 { return _vector.coeffRef(n); }

◆ coeffRef() [2/2]

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

Definition at line 81 of file CoordinateBase.h.

81 { return const_cast<EigenVector&>(_vector).coeffRef(n); }
Eigen::Matrix< T, N, 1, Eigen::DontAlign > EigenVector

◆ distanceSquared()

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

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

Definition at line 138 of file Point.h.

138  {
139  // the cast to double is lame but Eigen seems to require they be the same type
140  return (this->asEigen() - other.asEigen()).squaredNorm();
141  }
EigenVector const & asEigen() const noexcept(IS_ELEMENT_NOTHROW_COPYABLE)
Return a fixed-size Eigen representation of the coordinate object.

◆ eq() [1/2]

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

Definition at line 76 of file Point.cc.

76  {
77  CoordinateExpr<N> r;
78  for (int n = 0; n < N; ++n) r[n] = this->_vector[n] == other[n];
79  return r;
80 }

◆ eq() [2/2]

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

Definition at line 81 of file Point.h.

81  {
82  return this->eq(Point<T, N>(scalar));
83  }
CoordinateExpr< N > eq(Point< T, N > const &other) const noexcept
Definition: Point.cc:76

◆ ge() [1/2]

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

Definition at line 111 of file Point.cc.

111  {
112  CoordinateExpr<N> r;
113  for (int n = 0; n < N; ++n) r[n] = this->_vector[n] >= other[n];
114  return r;
115 }

◆ ge() [2/2]

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

Definition at line 96 of file Point.h.

96  {
97  return this->ge(Point<T, N>(scalar));
98  }
CoordinateExpr< N > ge(Point< T, N > const &other) const noexcept
Definition: Point.cc:111

◆ gt() [1/2]

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

Definition at line 104 of file Point.cc.

104  {
105  CoordinateExpr<N> r;
106  for (int n = 0; n < N; ++n) r[n] = this->_vector[n] > other[n];
107  return r;
108 }

◆ gt() [2/2]

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

Definition at line 93 of file Point.h.

93  {
94  return this->gt(Point<T, N>(scalar));
95  }
CoordinateExpr< N > gt(Point< T, N > const &other) const noexcept
Definition: Point.cc:104

◆ le() [1/2]

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

Definition at line 97 of file Point.cc.

97  {
98  CoordinateExpr<N> r;
99  for (int n = 0; n < N; ++n) r[n] = this->_vector[n] <= other[n];
100  return r;
101 }

◆ le() [2/2]

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

Definition at line 90 of file Point.h.

90  {
91  return this->le(Point<T, N>(scalar));
92  }
CoordinateExpr< N > le(Point< T, N > const &other) const noexcept
Definition: Point.cc:97

◆ lt() [1/2]

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

Definition at line 90 of file Point.cc.

90  {
91  CoordinateExpr<N> r;
92  for (int n = 0; n < N; ++n) r[n] = this->_vector[n] < other[n];
93  return r;
94 }

◆ lt() [2/2]

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

Definition at line 87 of file Point.h.

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

◆ ne() [1/2]

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

Definition at line 83 of file Point.cc.

83  {
84  CoordinateExpr<N> r;
85  for (int n = 0; n < N; ++n) r[n] = this->_vector[n] != other[n];
86  return r;
87 }

◆ ne() [2/2]

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

Definition at line 84 of file Point.h.

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

◆ operator!=()

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

Standard inequality comparison.

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

Definition at line 60 of file Point.h.

60 { return any(this->ne(other)); }
bool any(CoordinateExpr< N > const &expr) noexcept
Return true if any elements are true.

◆ operator+()

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

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

Definition at line 110 of file Point.h.

110  {
111  return Point<T, N>(this->_vector + other.asEigen());
112  }

◆ operator+=()

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

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

Definition at line 116 of file Point.h.

116  {
117  this->_vector += other.asEigen();
118  return static_cast<Point<T, N> &>(*this);
119  }

◆ operator-() [1/2]

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

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

Definition at line 113 of file Point.h.

113  {
114  return Point<T, N>(this->_vector - other.asEigen());
115  }

◆ operator-() [2/2]

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

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

Definition at line 107 of file Point.h.

107  {
108  return Extent<T, N>(this->_vector - other._vector);
109  }

◆ operator-=()

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

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

Definition at line 120 of file Point.h.

120  {
121  this->_vector -= other.asEigen();
122  return static_cast<Point<T, N> &>(*this);
123  }

◆ operator=() [1/2]

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

◆ operator=() [2/2]

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

◆ operator==()

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

Standard equality comparison.

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

Definition at line 53 of file Point.h.

53 { return all(this->eq(other)); }
bool all(CoordinateExpr< N > const &expr) noexcept
Return true if all elements are true.

◆ operator[]() [1/2]

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

Definition at line 78 of file CoordinateBase.h.

78 { return _vector[n]; }

◆ operator[]() [2/2]

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

Definition at line 79 of file CoordinateBase.h.

79 { return const_cast<EigenVector&>(_vector)[n]; }

◆ scale()

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

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

Definition at line 136 of file Point.h.

136 { this->_vector *= factor; }

◆ shift()

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

Shift the point by the given offset.

Definition at line 132 of file Point.h.

132  {
133  this->_vector += offset.asEigen();
134  }

◆ toString()

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

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

Definition at line 143 of file Point.h.

143  {
144  std::stringstream out;
145  out << "Point(";
146  for (size_t i = 0; i < N; ++i) {
147  if (i != 0) {
148  out << ",";
149  }
150  out << (*this)[i];
151  }
152  out << ")";
153  return out.str();
154  }
T str(T... args)

Friends And Related Function Documentation

◆ allclose()

bool allclose ( CoordinateBase< Derived, T, N > const &  a,
CoordinateBase< Derived, 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 120 of file CoordinateBase.cc.

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

Member Data Documentation

◆ _vector

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

Definition at line 109 of file CoordinateBase.h.

◆ dimensions

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

Definition at line 58 of file CoordinateBase.h.

◆ IS_ELEMENT_NOTHROW_ASSIGNABLE

constexpr bool lsst::geom::CoordinateBase< Point< T, N > , T, N >::IS_ELEMENT_NOTHROW_ASSIGNABLE
staticconstexprinherited

Definition at line 61 of file CoordinateBase.h.

◆ IS_ELEMENT_NOTHROW_COPYABLE

constexpr bool lsst::geom::CoordinateBase< Point< T, N > , T, N >::IS_ELEMENT_NOTHROW_COPYABLE
staticconstexprinherited

Definition at line 60 of file CoordinateBase.h.


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