Improved trackers

This commit is contained in:
2022-07-11 15:12:32 +02:00
parent 257c884355
commit c09c6258b4
2 changed files with 18 additions and 11 deletions
+18 -10
View File
@@ -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;
} }
} }
-1
View File
@@ -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;