I used to write program in Matlab. I have no experience in C++ at all.
But my boss order me to convert a matlab function to C++ function, so
he can use it with his program. For the concept of the program, it
receive a new input and keep some variable in memory to give a output.
Could you please tell me what mistake I have make in the program?
Thanks
#include <stdio.h>
#include <math.h>
class CGripperHysteresis {
private:
public:
CGripperHysteresis( );
void SetThreshold( double threshold);
double CalculateOutput( CGripperHysteresis, double input_data);
};
CGripperHysteresis::CGripperHysteresis( )
{
double m_last_update_side = 0;
double m_last_on_curve_value = 0;
double m_threshold = 0;
double output_data = 0;
double input_data = 0;
}
void CGripperHysteresis::SetThreshold( double threshold)
{
m_threshold = threshold;
}
double CGripperHysteresis::CalculateOutput(CGripperHyster esis, double
input_data)
{
double output_data_temp;
if (m_last_update_side == 0 && m_last_on_curve_value == 0)
{
if (input_data <= threshold){
output_data = 0;
m_last_update_side = 0;
m_last_on_curve_value = 0;}
else if (input_data threshold){
output_data = (input_data-threshold)/(1-threshold) ;
m_last_update_side = 0;
m_last_on_curve_value = output_data;
}
}
else if (m_last_update_side == 0 && m_last_on_curve_value 0 &&
m_last_on_curve_value <1)
{
output_data_temp = (input_data-threshold)/(1-threshold);
if (output_data_temp >= m_last_on_curve_value)
{
output_data = output_data_temp;
m_last_update_side = 0;
m_last_on_curve_value = output_data_temp;
}
else if (output_data_temp < m_last_on_curve_value && input_data >
m_last_on_curve_value*(1-threshold))
{
output_data = m_last_on_curve_value;
m_last_update_side = 0;
m_last_on_curve_value = m_last_on_curve_value;
}
else if (output_data_temp < m_last_on_curve_value && input_data <=
m_last_on_curve_value*(1-threshold))
{
output_data = m_last_on_curve_value;
m_last_update_side = 1;
m_last_on_curve_value = output_data;
}
}
else if (m_last_update_side == 0 && m_last_on_curve_value >= 1)
{
if (input_data >= (1 - threshold))
{
output_data = 1;
m_last_update_side = 0;
m_last_on_curve_value = 1;
}
else if (input_data < (1 - threshold))
{
output_data = (input_data)/(1-threshold) ;
m_last_update_side = 1;
m_last_on_curve_value = output_data;
}
}
else if (m_last_update_side == 1 && m_last_on_curve_value <= 1 &&
m_last_on_curve_value 0)
{
output_data_temp = (input_data)/(1-threshold);
if (output_data_temp <= m_last_on_curve_value)
{
output_data = output_data_temp;
m_last_update_side = 1;
m_last_on_curve_value = output_data_temp;
}
else if (output_data_temp m_last_on_curve_value && input_data <
m_last_on_curve_value*(1-threshold) + threshold)
{
output_data = m_last_on_curve_value;
m_last_update_side = 1;
m_last_on_curve_value = m_last_on_curve_value;
}
else if (output_data_temp m_last_on_curve_value && input_data >=
m_last_on_curve_value*(1-threshold) + threshold)
{
output_data = m_last_on_curve_value;
m_last_update_side = 0;
m_last_on_curve_value = m_last_on_curve_value;
}
}
else if (m_last_update_side == 1 && m_last_on_curve_value == 0)
{
if (input_data < threshold)
{
output_data = m_last_on_curve_value;
m_last_update_side = 0;
m_last_on_curve_value = m_last_on_curve_value;
}
else if (input_data >= threshold)
{
output_data = (input_data-threshold)/(1-threshold) ;
m_last_update_side = 0;
m_last_on_curve_value = output_data;
}
}
return output_data;
}