All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines
Public Member Functions | Protected Attributes
QGpCoreTools::DirectionalSearch Class Reference

Search a grid for maxima (global or local) along one direction only. More...

#include <DirectionalSearch.h>

Inheritance diagram for QGpCoreTools::DirectionalSearch:
QGpCoreTools::Function2Search LinearFKSearch LinearHRFKSearch

List of all members.

Public Member Functions

 DirectionalSearch ()
double globalMax ()
Function2MaximaIterator localMax (int nMax, double absThres=0.0, double relThres=0.0)
void setAbsolutePrecision (double p)
void setAzimuth (double azimuth)
void setFunction (AbstractFunction2 *f)
void setGrid (double minR, double maxR, double dR)
void setRelativePrecision (double p)
double value (double r) const
 ~DirectionalSearch ()

Protected Attributes

double _cx
int _nr
double _precision
double * _r
double _sy

Detailed Description

Search a grid for maxima (global or local) along one direction only.

Full description of class still missing


Constructor & Destructor Documentation

Description of constructor still missing

References _nr, _precision, _r, and TRACE.

{
  TRACE;
  _precision=0.001;
  _nr=0;
  _r=0;
}

Description of destructor still missing

References _r, and TRACE.

{
  TRACE;
  delete [] _r;
}

Member Function Documentation

Search current azimuth for its maximum and refine it

References _cx, QGpCoreTools::Function2Search::_function, _nr, _r, _sy, QGpCoreTools::Function2Search::highLimit(), QGpCoreTools::Function2Search::lowLimit(), TRACE, and QGpCoreTools::AbstractFunction2::value().

{
  TRACE;
  int maxi=0;
  double val,maxVal=-1e99;
  for(int i=0; i<_nr; i++) {
    val=_function->value(_cx*_r[i],_sy*_r[i], i);
    if(val>maxVal) {
      maxVal=val;
      maxi=i;
    }
  }
  // Refine search by recursion and re-regridding
  return refineMax(lowLimit(maxi, _r),highLimit(maxi, _r, _nr));
}
Function2MaximaIterator QGpCoreTools::DirectionalSearch::localMax ( int  nMax,
double  absThres = 0.0,
double  relThres = 0.0 
)

Reimplemented from QGpCoreTools::Function2Search.

References _cx, QGpCoreTools::Function2Search::_function, QGpCoreTools::Function2Search::_localMaxima, _nr, QGpCoreTools::Function2Search::_pos, _r, _sy, TRACE, and QGpCoreTools::AbstractFunction2::value().

{
  TRACE;
  double * map=new double [_nr];
  for(int i=0; i<_nr; i++) {
    map[i]=_function->value(_cx*_r[i],_sy*_r[i]);
  }
  _localMaxima.clear();
  int nm=_nr-1;
  for(int i=1;i<nm;i++) {
    if(map[i-1]>0 && map[i]>map[i-1] &&
        map[i+1]>0 && map[i]>map[i+1]) {
      double val=refineMax(_r[i-1], _r[i+1]);
      _localMaxima.append(Function2SearchMaximum(val, _pos));
    }
  }
  delete [] map;
  return Function2Search::localMax(nMax, absThres, relThres);
}
{_precision=p; _relative=false;}

Set current azimuth of search

References _cx, _sy, QGpCoreTools::cos(), QGpCoreTools::sin(), and TRACE.

Referenced by LinearFKPassiveLoopTask::setGrid().

{
  TRACE;
  _cx=::cos(azimuth);
  _sy=::sin(azimuth);
}

Set current function. Ownership is transfered to this object. To get it back you must call takeFunction().

Reimplemented from QGpCoreTools::Function2Search.

{_function=f;}
void QGpCoreTools::DirectionalSearch::setGrid ( double  minR,
double  maxR,
double  dR 
)

Init sampling in radius. setFunction() must be called before.

References _cx, QGpCoreTools::Function2Search::_function, _nr, _r, _sy, QGpCoreTools::AbstractFunction2::initGrid(), and TRACE.

{
  TRACE;
  ASSERT(_function);

  int nr=(int)floor((maxR-minR)/dR+0.5)+1;
  bool nChanged=false;
  if(nr!=_nr) {
    delete [] _r;
    _r=new double [nr];
    _nr=nr;
    nChanged=true;
  }

  _function->initGrid(_nr);
  for(int i=0;i<_nr;i++) {
    _r[i]=minR+dR*(double)i;
    _function->initGrid(_cx*_r[i], _sy*_r[i], i);
  }
}
double QGpCoreTools::DirectionalSearch::value ( double  r) const [inline]
{return _function->value(_cx*r, _sy*r);}

Member Data Documentation

Referenced by DirectionalSearch().


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines