From 4269e9370873ac31fe671c710536958ca4374aad Mon Sep 17 00:00:00 2001 From: Thales Lima Oliveira Date: Wed, 10 May 2017 18:27:30 -0300 Subject: All element's solutions implemented Initialization is missing --- Project/RateLimiter.cpp | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) (limited to 'Project/RateLimiter.cpp') 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 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; +} -- cgit From d44c3a76943c90cfcbf336961d9ba3516a1c80dc Mon Sep 17 00:00:00 2001 From: Thales Lima Oliveira Date: Sat, 13 May 2017 16:13:12 -0300 Subject: Several bugs fixed, ready to pull --- Project/RateLimiter.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'Project/RateLimiter.cpp') diff --git a/Project/RateLimiter.cpp b/Project/RateLimiter.cpp index 3a1b25a..42bede1 100644 --- a/Project/RateLimiter.cpp +++ b/Project/RateLimiter.cpp @@ -93,9 +93,9 @@ void RateLimiter::UpdatePoints() } } -bool RateLimiter::Solve(double input) +bool RateLimiter::Solve(double input, double timeStep) { - double rate = (input - m_output) / m_timeStep; + double rate = (input - m_output) / timeStep; bool reachLimit = false; if(rate > m_upLimit) { @@ -107,7 +107,7 @@ bool RateLimiter::Solve(double input) } if(reachLimit) - m_output += rate * m_timeStep; + m_output += rate * timeStep; else m_output = input; return true; -- cgit