DGtal  1.4.beta
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  }
static double castToDouble(const std::decay< T >::type &aT)
Cast method to double (for I/O or board export uses only).
Definition: NumberTraits.h:164
MyPointD Point
Definition: testClone2.cpp:383

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


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