Revert "Revert "Attempt at fixing complimentary algorithm""

This reverts commit 0e7aba5991.
This commit is contained in:
nedko 2022-12-07 14:50:39 +02:00
parent 196d470870
commit 7a58540b6b

View File

@ -2,6 +2,8 @@
#include <math.h> #include <math.h>
#include <stdio.h>
// CONSTRUCTORS // CONSTRUCTORS
ComplimentaryColourExtractor::ComplimentaryColourExtractor(struct ColourHSL hsl, ComplimentaryColourExtractor::ComplimentaryColourExtractor(struct ColourHSL hsl,
size_t h_levels, size_t s_levels, size_t v_levels) size_t h_levels, size_t s_levels, size_t v_levels)
@ -17,28 +19,59 @@ size_t ComplimentaryColourExtractor::evaluate_colour(struct ColourHSL hsl,
double angle_delta; double angle_delta;
// double additional_colour_weight; // double additional_colour_weight;
// if ((0.0 == hsl.s) || (0.0 == m_main_colour.s)) if ((0 == (1.0 - fabs(2 * m_main_colour.l - 1.0))) ||
// { (0 == (1.0 - fabs(2 * hsl.l - 1.0))) ||
// angle_delta = 180.0; (0 == m_main_colour.s) ||
(0 == hsl.s))
{
angle_delta = 90.0;
// additional_colour_weight = 0.5; // additional_colour_weight = 0.5;
// } }
// else else
// { {
// additional_colour_weight = 1.0; // additional_colour_weight = 1.0;
// /* SECTION BEGIN */ /* SECTION BEGIN */
// angle_delta = fabs(hsl.h - m_main_colour.h);
// if (angle_delta > 180.0F)
// {
// angle_delta = 360.0F - angle_delta;
// }
// /* SECTION END */
// }
angle_delta = fabs(hsl.h - m_main_colour.h); angle_delta = fabs(hsl.h - m_main_colour.h);
if (angle_delta > 180.0F) if (angle_delta > 180.0F)
{ {
angle_delta = 360.0F - angle_delta; angle_delta = 360.0F - angle_delta;
} }
/* SECTION END */
}
// double main_x = cos(m_main_colour.h * M_PI / 180.0) * m_main_colour.s;
// double main_y = sin(m_main_colour.h * M_PI / 180.0) * m_main_colour.s;
// double main_z = 1.0 - 2 * m_main_colour.l;
// double eval_x = cos(hsl.h * M_PI / 180.0) * hsl.s;
// double eval_y = sin(hsl.h * M_PI / 180.0) * hsl.s;
// double eval_z = 1.0 - 2 * hsl.l;
// // double total_x = main_x - eval_x;
// // double total_y = main_y - eval_y;
// // double total_z = main_z - eval_z;
// //double vec_magn = sqrt(pow(total_x, 2) + pow(total_y, 2) + pow(total_z, 2));
// double angle_diff = -(((main_x * eval_x + main_y * eval_y + main_z * eval_z) /
// (sqrt(pow(main_x, 2) + pow(main_y, 2) + pow(main_z, 2)) *
// sqrt(pow(eval_x, 2) + pow(eval_y, 2) + pow(eval_z, 2)))) - 1.0) / 2;
// static double max_angle_diff = 0.0;
// printf("Main - %f %f %f\n", m_main_colour.h, m_main_colour.s, m_main_colour.l);
// printf("Eval - %f %f %f\n", hsl.h, hsl.s, hsl.l);
// printf("Main Vec - %f %f %f\n", main_x, main_y, main_z);
// printf("Eval Vec - %f %f %f\n", eval_x, eval_y, eval_z);
// // printf("Res Vec - %f %f %f\n", total_x, total_y, total_z);
// printf("Ang diff - %f\n", angle_diff);
// if (angle_diff > max_angle_diff)
// {
// max_angle_diff = angle_diff;
// printf("Max Angle Diff\n");
// }
// angle_delta = fabs(hsl.h - m_main_colour.h);
// if (angle_delta > 180.0F)
// {
// angle_delta = 360.0F - angle_delta;
// }
// result = static_cast<size_t>(round(1000.0 * pow(weight, 0.3) * hsv.v * // result = static_cast<size_t>(round(1000.0 * pow(weight, 0.3) * hsv.v *
// fmin(1.0, hsv.v + hsv.s) * additional_colour_weight * angle_delta)); // fmin(1.0, hsv.v + hsv.s) * additional_colour_weight * angle_delta));
@ -47,7 +80,9 @@ size_t ComplimentaryColourExtractor::evaluate_colour(struct ColourHSL hsl,
// additional_colour_weight * angle_delta)); // additional_colour_weight * angle_delta));
result = static_cast<size_t>(round(1000.0 * pow(weight, 0.3) * result = static_cast<size_t>(round(1000.0 * pow(weight, 0.3) *
((1.0 - fabs(2 * hsl.l - 1.0)) * (1 - 1.0 / m_l_levels) + 1.0 / m_l_levels) * pow(((1.0 - fabs(2 * hsl.l - 1.0)) * (1 - 1.0 / m_l_levels) + 1.0 / m_l_levels), 0.3) *
hsl.s *
// additional_colour_weight *
angle_delta)); angle_delta));
return result; return result;