DGtal  1.5.beta
DGtal::concepts::CMetricSpace< T > Struct Template Reference

Aim: defines the concept of metric spaces. More...

#include <DGtal/geometry/volumes/distance/CMetricSpace.h>

Inheritance diagram for DGtal::concepts::CMetricSpace< T >:
[legend]

Public Types

typedef T::Point Point
 
typedef T::Space Space
 
typedef T::Value Value
 
typedef T::RawValue RawValue
 

Public Member Functions

 BOOST_CONCEPT_ASSERT ((CSpace< Space >))
 
 BOOST_CONCEPT_ASSERT ((CQuantity< Value >))
 
 BOOST_CONCEPT_ASSERT ((CQuantity< RawValue >))
 
 BOOST_CONCEPT_USAGE (CMetricSpace)
 
void checkConstConstraints () const
 

Private Attributes

myX
 
Point myPoint
 
Point myPoint2
 
Point myPoint3
 
Value myValue
 
RawValue myRawValue
 
DGtal::Closest myClosest
 

Detailed Description

template<typename T>
struct DGtal::concepts::CMetricSpace< T >

Aim: defines the concept of metric spaces.

Description of concept 'CMetricSpace'

Models of metric spaces must satsify metric space conditions as described in Metric Spaces, Digital Metric Spaces and Related Concepts. For short, models must have a Point inner type and a distance Value type.

In addition, CMetricSpace models should implement a distance function (operator ()) on points satisfying the metric conditions:

  • d(x,y) >= 0
  • d(x,y) == 0 <=> x==y
  • d(x,y) == d(y,x) (symmetry)
  • d(x,y) <= d(x,z) + d(z,y) (triangle inequality)

Two additional methods must be implemented:

  • rawDistance(x,y) method provides internal distance representation between two points. For example, a convenient way to have an exact representation of hte Euclidean metric is to consider its square which can be represented error free on a CInteger type for example. In this case, the rawDistance method returns the square of the Euclidean distance between the two points in an exact way as soon as the internal RawValue type is error free and can represents sum of squares of Point::Coordiante values.
  • closest(a,x,y) decides which point between x and y is closest to a. This method is required for performance purposes.

Refinement of

Associated types

  • Space: type of space on which the metric is defined (model of CSpace).
  • Point: type of points associated with the underlying metric space.
  • Value: the value type of the metric (model of CQuantity).
  • RawValue: the value type for the rawDistance method (model of CQuantity).

Notation

  • X : A type that is a model of CMetricSpace
  • x, y : object of type X

Definitions

Valid expressions and semantics

Name Expression Type requirements Return type Precondition Semantics Post condition Complexity
distance computation x(aPoint,anotherPoint) aPoint and anotherPoint of type Point a value of type Value compute the distance between two points -
raw distance computation x.rawDistance(aPoint,anotherPoint) aPoint and anotherPoint of type Point a value of type RawValue compute the raw representation of the distance between two points -
closest point test closest(aOrigin, aP, aQ) aOrigin, aP,aQ of type aPoint a value of type Closest decide between aP and aQ which one is closer to the origin. This functions returns either DGtal::ClosestFIRST if aP is closer, DGtal::ClosestSECOND if aQ is closer and DGtal::ClosestBOTH if both are equidistant. -

Invariants

Models

LpMetric, ExactPredicateLpSeparableMetric, InexactPredicateLpSeparableMetric.

Notes

Template Parameters
Tthe type that should be a model of CMetricSpace.

Definition at line 124 of file CMetricSpace.h.

Member Typedef Documentation

◆ Point

template<typename T >
typedef T::Point DGtal::concepts::CMetricSpace< T >::Point

Definition at line 128 of file CMetricSpace.h.

◆ RawValue

template<typename T >
typedef T::RawValue DGtal::concepts::CMetricSpace< T >::RawValue

Definition at line 131 of file CMetricSpace.h.

◆ Space

template<typename T >
typedef T::Space DGtal::concepts::CMetricSpace< T >::Space

Definition at line 129 of file CMetricSpace.h.

◆ Value

template<typename T >
typedef T::Value DGtal::concepts::CMetricSpace< T >::Value

Definition at line 130 of file CMetricSpace.h.

Member Function Documentation

◆ BOOST_CONCEPT_ASSERT() [1/3]

template<typename T >
DGtal::concepts::CMetricSpace< T >::BOOST_CONCEPT_ASSERT ( (CQuantity< RawValue >)  )

◆ BOOST_CONCEPT_ASSERT() [2/3]

template<typename T >
DGtal::concepts::CMetricSpace< T >::BOOST_CONCEPT_ASSERT ( (CQuantity< Value >)  )

◆ BOOST_CONCEPT_ASSERT() [3/3]

template<typename T >
DGtal::concepts::CMetricSpace< T >::BOOST_CONCEPT_ASSERT ( (CSpace< Space >)  )

◆ BOOST_CONCEPT_USAGE()

template<typename T >
DGtal::concepts::CMetricSpace< T >::BOOST_CONCEPT_USAGE ( CMetricSpace< T >  )
inline

Definition at line 137 of file CMetricSpace.h.

138  {
140  }

References DGtal::concepts::CMetricSpace< T >::checkConstConstraints().

◆ checkConstConstraints()

template<typename T >
void DGtal::concepts::CMetricSpace< T >::checkConstConstraints ( ) const
inline

Definition at line 142 of file CMetricSpace.h.

143  {
144  // const method dummyConst should take parameter myA of type A and return
145  // something of type B
146  ConceptUtils::sameType( myValue, myX.operator()( myPoint , myPoint2 ) );
149  }
void sameType(const T &, const T &)
Definition: ConceptUtils.h:117

References DGtal::concepts::CMetricSpace< T >::myClosest, DGtal::concepts::CMetricSpace< T >::myPoint, DGtal::concepts::CMetricSpace< T >::myPoint2, DGtal::concepts::CMetricSpace< T >::myPoint3, DGtal::concepts::CMetricSpace< T >::myRawValue, DGtal::concepts::CMetricSpace< T >::myValue, DGtal::concepts::CMetricSpace< T >::myX, and DGtal::concepts::ConceptUtils::sameType().

Referenced by DGtal::concepts::CMetricSpace< T >::BOOST_CONCEPT_USAGE().

Field Documentation

◆ myClosest

template<typename T >
DGtal::Closest DGtal::concepts::CMetricSpace< T >::myClosest
private

◆ myPoint

template<typename T >
Point DGtal::concepts::CMetricSpace< T >::myPoint
private

◆ myPoint2

template<typename T >
Point DGtal::concepts::CMetricSpace< T >::myPoint2
private

◆ myPoint3

template<typename T >
Point DGtal::concepts::CMetricSpace< T >::myPoint3
private

◆ myRawValue

template<typename T >
RawValue DGtal::concepts::CMetricSpace< T >::myRawValue
private

◆ myValue

template<typename T >
Value DGtal::concepts::CMetricSpace< T >::myValue
private

◆ myX

template<typename T >
T DGtal::concepts::CMetricSpace< T >::myX
private

The documentation for this struct was generated from the following file: