79 typedef QSharedPointer<Spline>
SPtr;
88 Spline(QWidget* parent =
nullptr,
const QString& title =
"Spline Histogram");
98 void setData(
const Eigen::Matrix<T, Eigen::Dynamic, 1>& matClassLimitData,
99 const Eigen::Matrix<int, Eigen::Dynamic, 1>& matClassFrequencyData);
101 void setData(
const Eigen::Matrix<T, 1, Eigen::Dynamic>& matClassLimitData,
102 const Eigen::Matrix<int, 1, Eigen::Dynamic>& matClassFrequencyData);
112 void updatePlot(
const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& matClassLimitData,
113 const Eigen::VectorXi& matClassFrequencyData);
136 Eigen::VectorXd& vecCoefficientResults,
137 Eigen::VectorXi& vecExponentValues);
280 void borderChanged(
double leftThreshold,
double middleThreshold,
double rightThreshold);
289 const Eigen::Matrix<int, Eigen::Dynamic, 1>& matClassFrequencyData)
291 Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> matrixName(matClassLimitData.rows(), 1);
292 matrixName.col(0) = matClassLimitData;
293 this->
updatePlot(matrixName, matClassFrequencyData);
300 const Eigen::Matrix<int, 1, Eigen::Dynamic>& matClassFrequencyData)
302 Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> matrixName(1, matClassLimitData.cols());
303 matrixName.row(0) = matClassLimitData;
304 this->
updatePlot(matrixName, matClassFrequencyData);
311 const Eigen::VectorXi& matClassFrequencyData)
313 Eigen::VectorXd resultDisplayValues;
314 int iClassAmount = std::min(
static_cast<int>(matClassFrequencyData.rows()),
315 static_cast<int>(matClassLimitData.rows()) - 1);
316 if (iClassAmount < 1)
326 for (
int ir = 0; ir < iClassAmount; ++ir) {
327 double classMark = (resultDisplayValues(ir) + resultDisplayValues(ir + 1)) / 2.0;
328 m_seriesData.append(QPointF(classMark, matClassFrequencyData(ir)));
348 Eigen::VectorXd& vecCoefficientResults,
349 Eigen::VectorXi& vecExponentValues)
351 vecCoefficientResults.resize(iClassAmount + 1);
352 vecExponentValues.resize(iClassAmount + 1);
353 double originalValue(0.0),
354 limitDisplayValue(0.0),
355 doubleExponentValue(0.0);
356 int limitExponentValue(0);
357 for (
int ir = 0; ir <= iClassAmount; ++ir) {
358 originalValue = matClassLimitData(ir);
359 if (originalValue == 0.0) {
360 doubleExponentValue = 0.0;
362 doubleExponentValue = log10(std::fabs(originalValue));
365 limitExponentValue = round(doubleExponentValue);
366 limitDisplayValue = originalValue * (pow(10, -(limitExponentValue)));
367 vecCoefficientResults(ir) = limitDisplayValue;
368 vecExponentValues(ir) = limitExponentValue;
371 int lowestExponentValue{0},
372 highestExponentValue{0};
374 for (
int ir = 0; ir <= iClassAmount; ++ir) {
375 if (vecExponentValues(ir) < lowestExponentValue) {
376 lowestExponentValue = vecExponentValues(ir);
378 if (vecExponentValues(ir) > highestExponentValue) {
379 highestExponentValue = vecExponentValues(ir);
383 if (highestExponentValue > 0) {
384 for (
int ir = 0; ir <= iClassAmount; ++ir) {
385 while (vecExponentValues(ir) < highestExponentValue) {
386 vecCoefficientResults(ir) = vecCoefficientResults(ir) / 10;
387 vecExponentValues(ir)++;
392 if (lowestExponentValue < 0) {
393 for (
int ir = 0; ir <= iClassAmount; ++ir) {
394 while (vecExponentValues(ir) > lowestExponentValue) {
395 vecCoefficientResults(ir) = vecCoefficientResults(ir) * 10;
396 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)