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 = std::min(
static_cast<int>(matClassFrequencyData.rows()),
287 static_cast<int>(matClassLimitData.rows()) - 1);
288 if(iClassAmount < 1)
return;
297 for (
int ir = 0; ir < iClassAmount; ++ir)
299 double classMark = (resultDisplayValues(ir) + resultDisplayValues(ir + 1)) / 2.0;
300 m_seriesData.append(QPointF(classMark, matClassFrequencyData(ir)));
321 Eigen::VectorXd& vecCoefficientResults,
322 Eigen::VectorXi& vecExponentValues)
324 vecCoefficientResults.resize(iClassAmount + 1);
325 vecExponentValues.resize(iClassAmount + 1);
326 double originalValue(0.0),
327 limitDisplayValue(0.0),
328 doubleExponentValue(0.0);
329 int limitExponentValue(0);
330 for (
int ir = 0; ir <= iClassAmount; ++ir)
332 originalValue = matClassLimitData(ir);
333 if (originalValue == 0.0)
335 doubleExponentValue = 0.0;
339 doubleExponentValue = log10(std::fabs(originalValue));
342 limitExponentValue = round(doubleExponentValue);
343 limitDisplayValue = originalValue * (pow(10, -(limitExponentValue)));
344 vecCoefficientResults(ir) = limitDisplayValue;
345 vecExponentValues(ir) = limitExponentValue;
348 int lowestExponentValue{0},
349 highestExponentValue{0};
351 for (
int ir = 0; ir <= iClassAmount; ++ir)
353 if (vecExponentValues(ir) < lowestExponentValue)
355 lowestExponentValue = vecExponentValues(ir);
357 if (vecExponentValues(ir) > highestExponentValue)
359 highestExponentValue = vecExponentValues(ir);
363 if (highestExponentValue > 0)
365 for (
int ir = 0; ir <= iClassAmount; ++ir)
367 while (vecExponentValues(ir) < highestExponentValue)
369 vecCoefficientResults(ir) = vecCoefficientResults(ir) / 10;
370 vecExponentValues(ir)++;
375 if (lowestExponentValue < 0)
377 for (
int ir = 0; ir <= iClassAmount; ++ir)
379 while (vecExponentValues(ir) > lowestExponentValue)
381 vecCoefficientResults(ir) = vecCoefficientResults(ir) * 10;
382 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)