diff options
Diffstat (limited to 'Project/RateLimiter.cpp')
-rw-r--r-- | Project/RateLimiter.cpp | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/Project/RateLimiter.cpp b/Project/RateLimiter.cpp index 5da0578..3a1b25a 100644 --- a/Project/RateLimiter.cpp +++ b/Project/RateLimiter.cpp @@ -13,10 +13,7 @@ RateLimiter::RateLimiter(int id) : ControlElement(id) m_nodeList.push_back(nodeOut); } -RateLimiter::~RateLimiter() -{ -} - +RateLimiter::~RateLimiter() {} void RateLimiter::Draw(wxPoint2DDouble translation, double scale) const { glLineWidth(1.0); @@ -37,7 +34,7 @@ void RateLimiter::Draw(wxPoint2DDouble translation, double scale) const axis.push_back(m_position + wxPoint2DDouble(0, -13)); axis.push_back(m_position + wxPoint2DDouble(0, 13)); DrawLine(axis, GL_LINES); - + glLineWidth(2.0); std::vector<wxPoint2DDouble> limSymbol; limSymbol.push_back(m_position + wxPoint2DDouble(10, -10)); @@ -95,3 +92,23 @@ void RateLimiter::UpdatePoints() m_nodeList[1]->SetPosition(m_position + wxPoint2DDouble(0, -18)); } } + +bool RateLimiter::Solve(double input) +{ + double rate = (input - m_output) / m_timeStep; + + bool reachLimit = false; + if(rate > m_upLimit) { + rate = m_upLimit; + reachLimit = true; + } else if(rate < m_lowLimit) { + rate = m_lowLimit; + reachLimit = true; + } + + if(reachLimit) + m_output += rate * m_timeStep; + else + m_output = input; + return true; +} |