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