Improved trackers
This commit is contained in:
+18
-10
@@ -10,12 +10,11 @@ namespace Metrics
|
|||||||
{
|
{
|
||||||
|
|
||||||
Tracker::Tracker(RealScalar rho, RealScalar smoothness)
|
Tracker::Tracker(RealScalar rho, RealScalar smoothness)
|
||||||
: m_mags(NUM_QUADRRANTS)
|
: m_rho(rho)
|
||||||
, m_rho(rho)
|
|
||||||
, m_smoothness(smoothness)
|
, m_smoothness(smoothness)
|
||||||
, m_trackers(NUM_QUADRRANTS)
|
, m_trackers(NUM_QUADRRANTS)
|
||||||
{
|
{
|
||||||
m_mags = 0;
|
reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
Tracker::~Tracker()
|
Tracker::~Tracker()
|
||||||
@@ -24,8 +23,12 @@ Tracker::~Tracker()
|
|||||||
|
|
||||||
void Tracker::reset()
|
void Tracker::reset()
|
||||||
{
|
{
|
||||||
m_mags = 0;
|
CVec initVals = {ComplexScalar(-0.5,-0.5), ComplexScalar(+0.5,-0.5), ComplexScalar(-0.5,+0.5), ComplexScalar(+0.5,+0.5)};
|
||||||
m_trackers = 0;
|
|
||||||
|
for (auto v : initVals)
|
||||||
|
{
|
||||||
|
m_trackers[getQuadrant(v)] = v;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CVec Tracker::trackers() const
|
CVec Tracker::trackers() const
|
||||||
@@ -36,13 +39,18 @@ CVec Tracker::trackers() const
|
|||||||
void Tracker::process(ComplexScalar const &x)
|
void Tracker::process(ComplexScalar const &x)
|
||||||
{
|
{
|
||||||
size_t qu = getQuadrant(x);
|
size_t qu = getQuadrant(x);
|
||||||
m_mags *= m_rho;
|
|
||||||
|
|
||||||
RealScalar mag = abs(x);
|
ComplexScalar diff = x - m_trackers[qu];
|
||||||
if (mag > m_mags[qu])
|
RealScalar dist = abs(diff);
|
||||||
|
RealScalar weight = exp(-16*dist);
|
||||||
|
|
||||||
|
if (abs(x) > abs(m_trackers[qu]))
|
||||||
{
|
{
|
||||||
m_mags[qu] = mag;
|
m_trackers[qu] = m_smoothness*x + (RealScalar(1)-m_smoothness)*m_trackers[qu];
|
||||||
m_trackers[qu] = m_smoothness*x + (RealScalar(1.0)-m_smoothness)*m_trackers[qu];
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_trackers[qu] += RealScalar(0.5)*weight*diff;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ public:
|
|||||||
CVec trackers() const;
|
CVec trackers() const;
|
||||||
void reset();
|
void reset();
|
||||||
private:
|
private:
|
||||||
RVec m_mags;
|
|
||||||
RealScalar m_rho;
|
RealScalar m_rho;
|
||||||
RealScalar m_smoothness;
|
RealScalar m_smoothness;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user