83 typedef QSharedPointer<Spline>
SPtr;
92 Spline(QWidget* parent =
nullptr,
const QString& title =
"Spline Histogram");
102 void setData(
const Eigen::Matrix<T, Eigen::Dynamic, 1>& matClassLimitData,
103 const Eigen::Matrix<int, Eigen::Dynamic, 1>& matClassFrequencyData);
105 void setData(
const Eigen::Matrix<T, 1, Eigen::Dynamic>& matClassLimitData,
106 const Eigen::Matrix<int, 1, Eigen::Dynamic>& matClassFrequencyData);
116 void updatePlot(
const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& matClassLimitData,
117 const Eigen::VectorXi& matClassFrequencyData);
140 Eigen::VectorXd& vecCoefficientResults,
141 Eigen::VectorXi& vecExponentValues);
252 void borderChanged(
double leftThreshold,
double middleThreshold,
double rightThreshold);
261 const Eigen::Matrix<int, Eigen::Dynamic, 1>& matClassFrequencyData)
263 Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> matrixName(matClassLimitData.rows(),1);
264 matrixName.col(0) = matClassLimitData;
265 this->
updatePlot(matrixName, matClassFrequencyData);
272 const Eigen::Matrix<int, 1, Eigen::Dynamic>& matClassFrequencyData)
274 Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> matrixName(1, matClassLimitData.cols());
275 matrixName.row(0) = matClassLimitData;
276 this->
updatePlot(matrixName, matClassFrequencyData);
283 const Eigen::VectorXi& matClassFrequencyData)
285 Eigen::VectorXd resultDisplayValues;
286 int iClassAmount = matClassFrequencyData.rows();
295 for (
int ir = 0; ir < iClassAmount; ++ir)
297 double classMark = (resultDisplayValues(ir) + resultDisplayValues(ir + 1)) / 2.0;
298 m_seriesData.append(QPointF(classMark, matClassFrequencyData(ir)));
319 Eigen::VectorXd& vecCoefficientResults,
320 Eigen::VectorXi& vecExponentValues)
322 vecCoefficientResults.resize(iClassAmount + 1);
323 vecExponentValues.resize(iClassAmount + 1);
324 double originalValue(0.0),
325 limitDisplayValue(0.0),
326 doubleExponentValue(0.0);
327 int limitExponentValue(0);
328 for (
int ir = 0; ir <= iClassAmount; ++ir)
330 originalValue = matClassLimitData(ir);
331 if (originalValue == 0.0)
333 doubleExponentValue = 0.0;
337 doubleExponentValue = log10(std::fabs(originalValue));
340 limitExponentValue = round(doubleExponentValue);
341 limitDisplayValue = originalValue * (pow(10, -(limitExponentValue)));
342 vecCoefficientResults(ir) = limitDisplayValue;
343 vecExponentValues(ir) = limitExponentValue;
346 int lowestExponentValue{0},
347 highestExponentValue{0};
349 for (
int ir = 0; ir <= iClassAmount; ++ir)
351 if (vecExponentValues(ir) < lowestExponentValue)
353 lowestExponentValue = vecExponentValues(ir);
355 if (vecExponentValues(ir) > highestExponentValue)
357 highestExponentValue = vecExponentValues(ir);
361 if (highestExponentValue > 0)
363 for (
int ir = 0; ir <= iClassAmount; ++ir)
365 while (vecExponentValues(ir) < highestExponentValue)
367 vecCoefficientResults(ir) = vecCoefficientResults(ir) / 10;
368 vecExponentValues(ir)++;
373 if (lowestExponentValue < 0)
375 for (
int ir = 0; ir <= iClassAmount; ++ir)
377 while (vecExponentValues(ir) > lowestExponentValue)
379 vecCoefficientResults(ir) = vecCoefficientResults(ir) * 10;
380 vecExponentValues(ir)--;
void setData(const Eigen::Matrix< T, Eigen::Dynamic, 1 > &matClassLimitData, const Eigen::Matrix< int, Eigen::Dynamic, 1 > &matClassFrequencyData)
void splitCoefficientAndExponent(const Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic > &matClassLimitData, int iClassAmount, Eigen::VectorXd &vecCoefficientResults, Eigen::VectorXi &vecExponentValues)