34#if defined(PointVector_RECURSES)
35#error Recursive header files inclusion detected in PointVector.h
38#define PointVector_RECURSES
40#if !defined PointVector_h
56#include "DGtal/base/Common.h"
57#include "DGtal/base/CBidirectionalRange.h"
58#include "DGtal/kernel/NumberTraits.h"
59#include "DGtal/kernel/CEuclideanRing.h"
60#include "DGtal/kernel/ArithmeticConversionTraits.h"
67 template<Dimension dim,
typename Container>
71 template<Dimension dim,
typename Container>
163 typename TEuclideanRing,
164 typename TContainer=std::array<TEuclideanRing,dim> >
174 template <
typename T>
181 template <DGtal::Dimension dim,
typename TEucl
ideanRing,
typename TContainer>
189 typename LeftEuclideanRing,
typename LeftContainer,
190 typename RightEuclideanRing,
typename RightContainer >
192 typename
std::enable_if< IsArithmeticConversionValid<LeftEuclideanRing, RightEuclideanRing>::value >::type >
194 using type =
typename std::conditional<
195 std::is_same< LeftEuclideanRing, ArithmeticConversionType<LeftEuclideanRing, RightEuclideanRing> >::value,
205 typename LeftEuclideanRing,
typename LeftContainer,
206 typename RightEuclideanRing >
208 typename
std::enable_if<
209 IsArithmeticConversionValid<LeftEuclideanRing, RightEuclideanRing>::value
210 && ! IsAPointVector<RightEuclideanRing>::value >::type >
212 using type =
typename std::conditional<
213 std::is_same< LeftEuclideanRing, ArithmeticConversionType<LeftEuclideanRing, RightEuclideanRing> >::value,
223 typename LeftEuclideanRing,
224 typename RightEuclideanRing,
typename RightContainer >
226 typename
std::enable_if<
227 IsArithmeticConversionValid<LeftEuclideanRing, RightEuclideanRing>::value
228 && ! IsAPointVector<LeftEuclideanRing>::value >::type >
230 using type =
typename std::conditional<
231 std::is_same< LeftEuclideanRing, ArithmeticConversionType<LeftEuclideanRing, RightEuclideanRing> >::value,
245 typename LeftEuclideanRing,
typename LeftContainer,
246 typename RightEuclideanRing,
typename RightContainer >
256 typename LeftEuclideanRing,
typename LeftContainer,
257 typename RightEuclideanRing,
typename RightContainer >
269 typename LeftEuclideanRing,
typename LeftContainer,
270 typename RightEuclideanRing,
typename RightContainer >
282 typename LeftEuclideanRing,
typename LeftContainer,
283 typename RightEuclideanRing,
typename RightContainer >
295 typename LeftEuclideanRing,
typename LeftContainer,
296 typename RightEuclideanRing,
typename RightContainer >
308 typename LeftEuclideanRing,
typename LeftContainer,
309 typename RightEuclideanRing,
typename RightContainer >
323 typename LeftEuclideanRing,
typename LeftContainer,
324 typename RightEuclideanRing,
typename RightContainer >
336 typename LeftEuclideanRing,
typename LeftContainer,
337 typename RightEuclideanRing,
typename RightContainer >
349 typename LeftEuclideanRing,
typename LeftContainer,
350 typename RightEuclideanRing,
typename RightContainer >
362 typename LeftEuclideanRing,
typename LeftContainer,
363 typename RightEuclideanRing,
typename RightContainer >
378 typename LeftEuclideanRing,
typename LeftContainer,
379 typename RightScalar >
382 RightScalar
const& rhs )
392 typename RightEuclideanRing,
typename RightContainer >
404 typename LeftEuclideanRing,
typename LeftContainer,
405 typename RightScalar >
408 RightScalar
const& rhs )
418 typename RightEuclideanRing,
typename RightContainer >
430 typename LeftEuclideanRing,
typename LeftContainer,
431 typename RightScalar >
434 RightScalar
const& rhs )
444 typename RightEuclideanRing,
typename RightContainer >
456 typename LeftEuclideanRing,
typename LeftContainer,
457 typename RightScalar >
460 RightScalar
const& rhs )
470 typename RightEuclideanRing,
typename RightContainer >
485 typename LeftEuclideanRing,
typename LeftContainer,
486 typename RightEuclideanRing,
typename RightContainer >
498 typename LeftEuclideanRing,
typename LeftContainer,
499 typename RightEuclideanRing,
typename RightContainer >
511 typename LeftEuclideanRing,
typename LeftContainer,
512 typename RightEuclideanRing,
typename RightContainer >
523 typename LeftEuclideanRing,
typename LeftContainer,
524 typename RightEuclideanRing,
typename RightContainer >
539 typename LeftEuclideanRing,
typename LeftContainer,
540 typename RightEuclideanRing,
typename RightContainer >
556 typename LeftEuclideanRing,
typename LeftContainer,
557 typename RightEuclideanRing,
typename RightContainer >
569 typename LeftEuclideanRing,
typename LeftContainer,
570 typename RightEuclideanRing,
typename RightContainer >
581 typename LeftEuclideanRing,
typename LeftContainer,
582 typename RightEuclideanRing,
typename RightContainer >
590 typename TEuclideanRing,
591 typename TContainer >
598 typename TOtherEuclideanRing,
599 typename TOtherContainer >
701 typename LeftComponent,
typename LeftStorage,
702 typename RightComponent,
typename RightStorage,
703 typename BinaryFunctor >
706 const BinaryFunctor& f );
714 typename OtherComponent,
typename OtherStorage,
715 typename UnaryFunctor >
717 const UnaryFunctor & f );
743 typename OtherComponent,
typename OtherCont,
744 typename std::enable_if< std::is_same< Component, ArithmeticConversionType<Component, OtherComponent> >::value,
int >::type = 0 >
757 typename OtherComponent,
typename OtherCont,
758 typename std::enable_if< ! std::is_same< Component, ArithmeticConversionType<Component, OtherComponent> >::value,
int >::type = 0 >
781 typename OtherComponent,
782 typename OtherContainer,
783 typename std::enable_if< std::is_same< Component, ArithmeticConversionType<Component, OtherComponent> >::value,
int >::type = 0 >
804 typename OtherComponent,
805 typename OtherContainer,
806 typename std::enable_if< std::is_same< Component, ArithmeticConversionType<Component, OtherComponent> >::value,
int >::type = 0 >
808 const std::vector<Dimension> &dimensions);
828 typename OtherComponent,
829 typename OtherContainer,
830 typename std::enable_if< std::is_same< Component, ArithmeticConversionType<Component, OtherComponent> >::value,
int >::type = 0 >
832 const std::vector<Dimension> &dimensions);
850 typename OtherComponent,
851 typename OtherContainer,
852 typename UnaryFunctor >
854 const std::vector<Dimension> & dimensions,
855 const UnaryFunctor & f);
873 typename OtherComponent,
874 typename OtherContainer,
875 typename UnaryFunctor >
877 const std::vector<Dimension> & dimensions,
878 const UnaryFunctor & f);
893 typename OtherComponent,
894 typename OtherContainer >
896 const std::vector<Dimension> &dimensions )
const;
911 typename OtherComponent,
912 typename OtherContainer >
914 const std::vector<Dimension> &dimensions )
const;
1023 typename LeftEuclideanRing,
typename LeftContainer,
1024 typename RightEuclideanRing,
typename RightContainer >
1030 typename LeftEuclideanRing,
typename LeftContainer,
1031 typename RightEuclideanRing,
typename RightContainer >
1037 typename LeftEuclideanRing,
typename LeftContainer,
1038 typename RightEuclideanRing,
typename RightContainer >
1044 typename LeftEuclideanRing,
typename LeftContainer,
1045 typename RightEuclideanRing,
typename RightContainer >
1051 typename LeftEuclideanRing,
typename LeftContainer,
1052 typename RightEuclideanRing,
typename RightContainer >
1063 typename LeftEuclideanRing,
typename LeftContainer,
1064 typename RightEuclideanRing,
typename RightContainer >
1071 typename LeftEuclideanRing,
typename LeftContainer,
1072 typename RightEuclideanRing,
typename RightContainer >
1079 typename LeftEuclideanRing,
typename LeftContainer,
1080 typename RightEuclideanRing,
typename RightContainer >
1087 typename LeftEuclideanRing,
typename LeftContainer,
1088 typename RightEuclideanRing,
typename RightContainer >
1100 typename LeftEuclideanRing,
typename LeftContainer,
1101 typename RightScalar >
1104 RightScalar
const& rhs )
1108 typename LeftScalar,
1109 typename RightEuclideanRing,
typename RightContainer >
1116 typename LeftEuclideanRing,
typename LeftContainer,
1117 typename RightScalar >
1120 RightScalar
const& rhs )
1124 typename LeftScalar,
1125 typename RightEuclideanRing,
typename RightContainer >
1132 typename LeftEuclideanRing,
typename LeftContainer,
1133 typename RightScalar >
1136 RightScalar
const& rhs )
1140 typename LeftScalar,
1141 typename RightEuclideanRing,
typename RightContainer >
1148 typename LeftEuclideanRing,
typename LeftContainer,
1149 typename RightScalar >
1152 RightScalar
const& rhs )
1156 typename LeftScalar,
1157 typename RightEuclideanRing,
typename RightContainer >
1177 typename OtherComponent,
1178 typename std::enable_if< std::is_same< Component, ArithmeticConversionType<Component, OtherComponent> >::value,
int >::type = 0 >
1193 typename OtherComponent,
typename OtherStorage,
1194 typename std::enable_if< std::is_same< Component, ArithmeticConversionType<Component, OtherComponent> >::value,
int >::type = 0 >
1209 typename OtherComponent,
1210 typename std::enable_if< std::is_same< Component, ArithmeticConversionType<Component, OtherComponent> >::value,
int >::type = 0 >
1225 typename OtherComponent,
typename OtherStorage,
1226 typename std::enable_if< std::is_same< Component, ArithmeticConversionType<Component, OtherComponent> >::value,
int >::type = 0 >
1241 typename OtherComponent,
1242 typename std::enable_if< std::is_same< Component, ArithmeticConversionType<Component, OtherComponent> >::value,
int >::type = 0 >
1257 typename OtherComponent,
typename OtherStorage,
1258 typename std::enable_if< std::is_same< Component, ArithmeticConversionType<Component, OtherComponent> >::value,
int >::type = 0 >
1273 typename OtherComponent,
1274 typename std::enable_if< std::is_same< Component, ArithmeticConversionType<Component, OtherComponent> >::value,
int >::type = 0 >
1289 typename OtherComponent,
typename OtherStorage,
1290 typename std::enable_if< std::is_same< Component, ArithmeticConversionType<Component, OtherComponent> >::value,
int >::type = 0 >
1314 template <
typename OtherComponent,
typename OtherStorage >
1320 typename LeftEuclideanRing,
typename LeftContainer,
1321 typename RightEuclideanRing,
typename RightContainer >
1338 template <
typename OtherComponent,
typename OtherStorage >
1344 typename LeftEuclideanRing,
typename LeftContainer,
1345 typename RightEuclideanRing,
typename RightContainer >
1352 typename LeftEuclideanRing,
typename LeftContainer,
1353 typename RightEuclideanRing,
typename RightContainer >
1365 template <
typename OtherComponent,
typename OtherStorage >
1370 typename LeftEuclideanRing,
typename LeftContainer,
1371 typename RightEuclideanRing,
typename RightContainer >
1372 friend inline double
1386 template <
typename OtherComponent,
typename OtherStorage >
1392 typename LeftEuclideanRing,
typename LeftContainer,
1393 typename RightEuclideanRing,
typename RightContainer >
1409 template <
typename OtherComponent,
typename OtherStorage >
1415 typename LeftEuclideanRing,
typename LeftContainer,
1416 typename RightEuclideanRing,
typename RightContainer >
1428 template <
typename OtherComponent,
typename OtherStorage >
1432 typename LeftEuclideanRing,
typename LeftContainer,
1433 typename RightEuclideanRing,
typename RightContainer >
1444 template <
typename OtherComponent,
typename OtherStorage >
1448 typename LeftEuclideanRing,
typename LeftContainer,
1449 typename RightEuclideanRing,
typename RightContainer >
1606 template<Dimension dim,
typename Component,
typename TC>
1611 template< Dimension dim,
typename Component,
typename TC>
1618#include "DGtal/kernel/PointVector.ih"
1625#undef PointVector_RECURSES
Aim: Implements basic operations that will be used in Point and Vector classes.
UnsignedComponent norm1() const
void selfDisplay(std::ostream &out) const
PointVector()
Constructor.
friend double cosineSimilarity(PointVector< ptDim, LeftEuclideanRing, LeftContainer > const &lhs, PointVector< ptDim, RightEuclideanRing, RightContainer > const &rhs)
Positive angle between two vectors, deduced from their scalar product.
PointVector & operator*=(OtherComponent coeff)
Multiplies *this by the coeff scalar number.
Component Scalar
Types needed by CLinearAlgebraContainer.
PointVector(std::initializer_list< Component > init)
Constructor from initializer list.
friend DGtal::ArithmeticConversionType< LeftEuclideanRing, RightEuclideanRing > dotProduct(PointVector< ptDim, LeftEuclideanRing, LeftContainer > const &lhs, PointVector< ptDim, RightEuclideanRing, RightContainer > const &rhs)
Dot product between two points/vectors.
friend auto inf(PointVector< ptDim, LeftEuclideanRing, LeftContainer > const &lhs, PointVector< ptDim, RightEuclideanRing, RightContainer > const &rhs) -> decltype(DGtal::constructFromArithmeticConversion(lhs, rhs))
Implements the infimum (or greatest lower bound).
friend bool isUpper(PointVector< ptDim, LeftEuclideanRing, LeftContainer > const &lhs, PointVector< ptDim, RightEuclideanRing, RightContainer > const &rhs)
Return true if the first point is upper the second point.
bool partialEqual(const PointVector< dim, OtherComponent, OtherContainer > &pv, const std::vector< Dimension > &dimensions) const
Partial equality.
static Self base(Dimension k, Component val=1)
bool isLower(const PointVector< dim, OtherComponent, OtherStorage > &p) const
Return true if this point is below a given point.
PointVector(const Component &x, const Component &y)
Constructor from two values (the Dimension of the vector should be at least 2). Other components are ...
PointVector< dim, double, std::array< double, dim > > getNormalized() const
ConstReverseIterator rend() const
friend auto crossProduct(PointVector< 3, LeftEuclideanRing, LeftContainer > const &lhs, PointVector< 3, RightEuclideanRing, RightContainer > const &rhs) -> decltype(DGtal::constructFromArithmeticConversion(lhs, rhs))
Cross product of two 3D Points/Vectors.
friend bool operator<=(PointVector< ptDim, LeftEuclideanRing, LeftContainer > const &lhs, PointVector< ptDim, RightEuclideanRing, RightContainer > const &rhs)
Comparison operator on Points/Vectors (LesserOrEqualThan).
PointVector(const PointVector< dim, LeftComponent, LeftStorage > &apoint1, const PointVector< dim, RightComponent, RightStorage > &apoint2, const BinaryFunctor &f)
Constructor taking two points and a functor as parameters.
PointVector(const Self &other)
Copy constructor.
friend auto operator-(PointVector< ptDim, LeftEuclideanRing, LeftContainer > const &lhs, PointVector< ptDim, RightEuclideanRing, RightContainer > const &rhs) -> decltype(DGtal::constructFromArithmeticConversion(lhs, rhs))
Subtraction operator between two Points/Vectors.
auto dot(const PointVector< dim, OtherComponent, OtherStorage > &v) const -> decltype(DGtal::dotProduct(*this, v))
Dot product with a PointVector.
Self & partialCopyInv(const PointVector< dim, OtherComponent, OtherContainer > &pv, const std::vector< Dimension > &dimensions)
Partial copy of a given PointVector.
auto inf(const PointVector< dim, OtherComponent, OtherStorage > &aPoint) const -> decltype(DGtal::inf(*this, aPoint))
Implements the infimum (or greatest lower bound).
UnsignedComponent normInfinity() const
friend auto sup(PointVector< ptDim, LeftEuclideanRing, LeftContainer > const &lhs, PointVector< ptDim, RightEuclideanRing, RightContainer > const &rhs) -> decltype(DGtal::constructFromArithmeticConversion(lhs, rhs))
Implements the supremum (or least upper bound).
double squaredNorm() const
double norm(const NormType type=L_2) const
PointVector & operator+=(OtherComponent coeff)
Adds the coeff scalar number to *this.
ConstReverseIterator rbegin() const
Component Coordinate
Type for Point elements.
friend auto operator+(PointVector< ptDim, LeftEuclideanRing, LeftContainer > const &lhs, PointVector< ptDim, RightEuclideanRing, RightContainer > const &rhs) -> decltype(DGtal::constructFromArithmeticConversion(lhs, rhs))
Addition operator between two Points/Vectors.
const Component * data() const noexcept
ConstIterator end() const
void reset()
Resets all the values to zero.
Self & operator=(const Self &pv)
Assignement Operator.
NumberTraits< Component >::UnsignedVersion UnsignedComponent
Unsigned version of the components.
friend bool isLower(PointVector< ptDim, LeftEuclideanRing, LeftContainer > const &lhs, PointVector< ptDim, RightEuclideanRing, RightContainer > const &rhs)
Return true if the first point is below the second point.
Component & operator[](Dimension i)
BOOST_CONCEPT_ASSERT((concepts::CEuclideanRing< TEuclideanRing >))
PointVector(const Component &x, const Component &y, const Component &z)
Constructor from three values (the Dimension of the vector should be at least 3). Other components ar...
Self & partialCopyInv(const PointVector< dim, OtherComponent, OtherContainer > &pv, const std::vector< Dimension > &dimensions, const UnaryFunctor &f)
Partial copy of a given PointVector using a functor.
PointVector(const PointVector< dim, OtherComponent, OtherStorage > &apoint1, const UnaryFunctor &f)
Constructor taking a point and a unary functor as parameters.
PointVector(const Component &x, const Component &y, const Component &z, const Component &t)
Constructor from four values (the Dimension of the vector should be at least 4). Other components are...
PointVector< dim, TEuclideanRing, TContainer > Self
Self type.
friend bool operator<(PointVector< ptDim, LeftEuclideanRing, LeftContainer > const &lhs, PointVector< ptDim, RightEuclideanRing, RightContainer > const &rhs)
Comparison operator on Points/Vectors (LesserThan).
std::string className() const
void clear()
Resets all the values to zero.
Self & partialCopy(const PointVector< dim, OtherComponent, OtherContainer > &pv, const std::vector< Dimension > &dimensions, const UnaryFunctor &f)
Partial copy of a given PointVector using a functor.
auto sup(const PointVector< dim, OtherComponent, OtherStorage > &aPoint) const -> decltype(DGtal::sup(*this, aPoint))
Implements the supremum (or least upper bound).
auto crossProduct(const PointVector< dim, OtherComponent, OtherStorage > &v) const -> decltype(DGtal::crossProduct(*this, v))
Cross product with a PointVector.
bool isUpper(const PointVector< dim, OtherComponent, OtherStorage > &p) const
Return true if this point is upper a given point.
const Component & operator[](Dimension i) const
PointVector(const Component *ptrValues)
Constructor from array of values.
friend bool operator!=(PointVector< ptDim, LeftEuclideanRing, LeftContainer > const &lhs, PointVector< ptDim, RightEuclideanRing, RightContainer > const &rhs)
Difference operator on Points/Vectors.
friend bool operator>=(PointVector< ptDim, LeftEuclideanRing, LeftContainer > const &lhs, PointVector< ptDim, RightEuclideanRing, RightContainer > const &rhs)
Comparison operator on Points/Vectors (GreaterOrEqualThan).
Container::reverse_iterator ReverseIterator
Mutable reverse iterator type.
Container myArray
Internal data-structure: std::array with constant size.
TEuclideanRing Component
Type for Vector elements.
bool partialEqualInv(const PointVector< dim, OtherComponent, OtherContainer > &pv, const std::vector< Dimension > &dimensions) const
Partial inverse equality.
PointVector(const PointVector< dim, OtherComponent, OtherCont > &other)
Copy constructor from another component PointVector.
friend PointVector< 3, DGtal::ArithmeticConversionType< LeftEuclideanRing, RightEuclideanRing > > crossProduct(PointVector< 2, LeftEuclideanRing, LeftContainer > const &lhs, PointVector< 2, RightEuclideanRing, RightContainer > const &rhs)
Cross product of two 2D Points/Vectors.
static Self diagonal(Component val=1)
DGtal::Dimension Dimension
Copy of the dimension type.
Container::const_iterator ConstIterator
Constant iterator type.
static Self zero
Static const for zero PointVector.
friend auto operator*(PointVector< ptDim, LeftEuclideanRing, LeftContainer > const &lhs, PointVector< ptDim, RightEuclideanRing, RightContainer > const &rhs) -> decltype(DGtal::constructFromArithmeticConversion(lhs, rhs))
Multiplication operator between two Points/Vectors.
double cosineSimilarity(const PointVector< dim, OtherComponent, OtherStorage > &v) const
Positive angle between two vectors, deduced from their scalar product.
friend auto operator/(PointVector< ptDim, LeftEuclideanRing, LeftContainer > const &lhs, PointVector< ptDim, RightEuclideanRing, RightContainer > const &rhs) -> decltype(DGtal::constructFromArithmeticConversion(lhs, rhs))
Division operator between two Points/Vectors.
friend bool operator==(PointVector< ptDim, LeftEuclideanRing, LeftContainer > const &lhs, PointVector< ptDim, RightEuclideanRing, RightContainer > const &rhs)
Equality operator between two Points/Vectors.
ConstIterator begin() const
Container::const_reverse_iterator ConstReverseIterator
Constant reverse iterator type.
Component & operator()(Dimension i)
PointVector & operator-=(OtherComponent coeff)
Subtracts the coeff scalar number to *this.
~PointVector()
Destructor.
Container::iterator Iterator
Mutable iterator type.
PointVector & operator/=(OtherComponent coeff)
Divides *this by the coeff scalar number.
const Component & operator()(Dimension i) const
Self operator-() const
Unary minus operator.
static const Dimension dimension
Copy of the static dimension of the Point/Vector.
Self & partialCopy(const PointVector< dim, OtherComponent, OtherContainer > &pv, const std::vector< Dimension > &dimensions)
Partial copy of a given PointVector.
TContainer Container
Copy of the container type.
DGtal is the top-level namespace which contains all DGtal functions and types.
bool operator>=(PointVector< ptDim, LeftEuclideanRing, LeftContainer > const &lhs, PointVector< ptDim, RightEuclideanRing, RightContainer > const &rhs)
Comparison operator on Points/Vectors (GreaterOrEqualThan).
KForm< Calculus, order, duality > operator*(const typename Calculus::Scalar &scalar, const KForm< Calculus, order, duality > &form)
auto crossProduct(PointVector< 3, LeftEuclideanRing, LeftContainer > const &lhs, PointVector< 3, RightEuclideanRing, RightContainer > const &rhs) -> decltype(DGtal::constructFromArithmeticConversion(lhs, rhs))
Cross product of two 3D Points/Vectors.
bool operator==(PointVector< ptDim, LeftEuclideanRing, LeftContainer > const &lhs, PointVector< ptDim, RightEuclideanRing, RightContainer > const &rhs)
Equality operator between two Points/Vectors.
std::bitset< dim > setDimensionsIn(const Container &dimensions)
bool operator!=(PointVector< ptDim, LeftEuclideanRing, LeftContainer > const &lhs, PointVector< ptDim, RightEuclideanRing, RightContainer > const &rhs)
Difference operator on Points/Vectors.
DGtal::ArithmeticConversionType< LeftEuclideanRing, RightEuclideanRing > dotProduct(PointVector< ptDim, LeftEuclideanRing, LeftContainer > const &lhs, PointVector< ptDim, RightEuclideanRing, RightContainer > const &rhs)
Dot product between two points/vectors.
Circulator< TIterator > operator+(typename IteratorCirculatorTraits< TIterator >::Difference d, Circulator< TIterator > &object)
std::ostream & operator<<(std::ostream &out, const ClosedIntegerHalfPlane< TSpace > &object)
bool operator<=(PointVector< ptDim, LeftEuclideanRing, LeftContainer > const &lhs, PointVector< ptDim, RightEuclideanRing, RightContainer > const &rhs)
Comparison operator on Points/Vectors (LesserOrEqualThan).
bool operator<(PointVector< ptDim, LeftEuclideanRing, LeftContainer > const &lhs, PointVector< ptDim, RightEuclideanRing, RightContainer > const &rhs)
Comparison operator on Points/Vectors (LesserThan).
bool isUpper(PointVector< ptDim, LeftEuclideanRing, LeftContainer > const &lhs, PointVector< ptDim, RightEuclideanRing, RightContainer > const &rhs)
Return true if the first point is upper the second point.
DGtal::uint32_t Dimension
auto operator/(PointVector< ptDim, LeftEuclideanRing, LeftContainer > const &lhs, PointVector< ptDim, RightEuclideanRing, RightContainer > const &rhs) -> decltype(DGtal::constructFromArithmeticConversion(lhs, rhs))
Division operator between two Points/Vectors.
double cosineSimilarity(PointVector< ptDim, LeftEuclideanRing, LeftContainer > const &lhs, PointVector< ptDim, RightEuclideanRing, RightContainer > const &rhs)
Positive angle between two vectors, deduced from their scalar product.
ArithmeticConversionType< LHS, RHS > constructFromArithmeticConversion(LHS const &lhs, RHS const &rhs, Args &&... args)
Call constructor for the result type of an arithmetic operation.
auto inf(PointVector< ptDim, LeftEuclideanRing, LeftContainer > const &lhs, PointVector< ptDim, RightEuclideanRing, RightContainer > const &rhs) -> decltype(DGtal::constructFromArithmeticConversion(lhs, rhs))
Implements the infimum (or greatest lower bound).
bool operator>(PointVector< ptDim, LeftEuclideanRing, LeftContainer > const &lhs, PointVector< ptDim, RightEuclideanRing, RightContainer > const &rhs)
Comparison operator on Points/Vectors (GreaterThan).
KForm< Calculus, order, duality > operator-(const KForm< Calculus, order, duality > &form_a, const KForm< Calculus, order, duality > &form_b)
std::bitset< dim > setDimensionsNotIn(const Container &dimensions)
auto sup(PointVector< ptDim, LeftEuclideanRing, LeftContainer > const &lhs, PointVector< ptDim, RightEuclideanRing, RightContainer > const &rhs) -> decltype(DGtal::constructFromArithmeticConversion(lhs, rhs))
Implements the supremum (or least upper bound).
typename ArithmeticConversionTraits< T, U >::type ArithmeticConversionType
Result type of arithmetic binary operators between two given types.
bool isLower(PointVector< ptDim, LeftEuclideanRing, LeftContainer > const &lhs, PointVector< ptDim, RightEuclideanRing, RightContainer > const &rhs)
Return true if the first point is below the second point.
typename std::conditional< std::is_same< LeftEuclideanRing, ArithmeticConversionType< LeftEuclideanRing, RightEuclideanRing > >::value, PointVector< dim, LeftEuclideanRing >, PointVector< dim, RightEuclideanRing, RightContainer > >::type type
typename std::conditional< std::is_same< LeftEuclideanRing, ArithmeticConversionType< LeftEuclideanRing, RightEuclideanRing > >::value, PointVector< dim, LeftEuclideanRing, LeftContainer >, PointVector< dim, RightEuclideanRing, RightContainer > >::type type
typename std::conditional< std::is_same< LeftEuclideanRing, ArithmeticConversionType< LeftEuclideanRing, RightEuclideanRing > >::value, PointVector< dim, LeftEuclideanRing, LeftContainer >, PointVector< dim, RightEuclideanRing > >::type type
Aim: Trait class to get result type of arithmetic binary operators between two given types.
Type trait to check if a given type is a PointVector.
Aim: Defines the mathematical concept equivalent to a unitary commutative ring with a division operat...
K init(Point(0, 0, 0), Point(512, 512, 512), true)