DGtal 1.4.0
Loading...
Searching...
No Matches
DGtal::detail::DistanceFromDCA Struct Reference

#include <DGtal/geometry/curves/estimation/SegmentComputerEstimators.h>

Public Types

typedef std::pair< double, double > Value
 

Public Member Functions

template<typename DCA >
Value operator() (const typename DCA::ConstIterator &it, const DCA &aDCA, const double &aH) const
 

Detailed Description

Description of class 'DistanceFromDCA'

Aim: estimates the distance of a given pair of points to the separating circle of a DCA.

Definition at line 925 of file SegmentComputerEstimators.h.

Member Typedef Documentation

◆ Value

typedef std::pair<double,double> DGtal::detail::DistanceFromDCA::Value

Definition at line 928 of file SegmentComputerEstimators.h.

Member Function Documentation

◆ operator()()

template<typename DCA >
Value DGtal::detail::DistanceFromDCA::operator() ( const typename DCA::ConstIterator & it,
const DCA & aDCA,
const double & aH ) const
inline

Operator()

Returns
distances (in a pair) of the inner and outer points pointed by it to the separating circle of aDCA
Parameters
itposition where the estimation has to be done
aDCAan instance of segment computer devoted to the DCA recognition.
aHgrid step
Template Parameters
DCAa model of segment computer devoted to the DCA recognition, basically geometricDCA.

Definition at line 947 of file SegmentComputerEstimators.h.

949 {
950 typedef typename DCA::Pair Pair;
951 typedef typename DCA::Point Point;
952 typedef typename Point::Coordinate Coordinate;
953
954 if ( !aDCA.isStraight() )
955 {
956 //separating circle center
957 double c0, c1, r;
958 aDCA.getSeparatingCircle().getParameters(c0, c1, r);
959 //points
960 Pair pair = *it;
961 Point i = pair.first;
962 Point o = pair.second;
963 //distances
964 double distI0 = NumberTraits<Coordinate>::castToDouble(i[0]) - c0;
965 double distI1 = NumberTraits<Coordinate>::castToDouble(i[1]) - c1;
966 double distI = std::sqrt( distI0*distI0 + distI1*distI1 ) - r;
967 double distO0 = NumberTraits<Coordinate>::castToDouble(o[0]) - c0;
968 double distO1 = NumberTraits<Coordinate>::castToDouble(o[1]) - c1;
969 double distO = std::sqrt( distO0*distO0 + distO1*distO1 ) - r;
970 return Value( distI*aH, distO*aH );
971 }
972 else
973 {
974 //separating straight line
975 double a, b, c;
976 aDCA.getStabbingLineComputerPtr()->getParameters(a, b, c);
977 //norm
978 double n = std::sqrt(a*a + b*b);
979 //points
980 Pair pair = *it;
981 Point i = pair.first;
982 Point o = pair.second;
983 //distances
984 double rI = NumberTraits<Coordinate>::castToDouble(i[0])*a +
986 double distI = rI / n;
987 double rO = NumberTraits<Coordinate>::castToDouble(o[0])*a +
989 double distO = rO / n;
990 return Value( distI*aH, distO*aH );
991 }
992 }
MyPointD Point

References DGtal::NumberTraitsImpl< std::decay< T >::type >::castToDouble().


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