Also habe ich versucht herauszufinden, wie man den durchschnittlichen Farbton einer Anzahl von Objekten berechnet, deren Farben durch HSL-Werte repräsentiert werden. Glücklicherweise bin ich über this Stack Overflow post gestolpert und habe mich daran gemacht, den in der oberen Antwort angegebenen Algorithmus zu implementieren (ich arbeite in C++).Mittelwertbildung von Kreiswerten (besonders Hues im HSL-Farbschema)
Leider scheint meine Implementierung nicht zu funktionieren. Hier ist es vollständig; Beachten Sie, dass obwohl ich "Farbton" schreibe, verwende ich Winkel, in Grad, wie bei der anfänglichen Implementierung (Wechsel von 0-360 Winkel zu 0-256 Farbtönen, sobald ich weiß, dass mein Code funktioniert, sollte nicht schwer sein).
#include <iostream>
#include <vector>
#include <cmath>
#define PI (4*atan(1))
int main()
{
///
/// Calculations adapted from this source:
/// https://stackoverflow.com/questions/8169654/how-to-calculate-mean-and-standard-deviation-for-hue-values-from-0-to-360
std::vector<double> Hues = {355, 5, 5, 5, 5};
//These will be used to store the sum of the angles
double X = 0.0;
double Y = 0.0;
//Loop through all H values
for (int hue = 0; hue < Hues.size(); ++hue)
{
//Add the X and Y values to the sum X and Y
X += cos(Hues[hue]/180 * PI);
Y += sin(Hues[hue]/180 * PI);
}
//Now average the X and Y values
X /= Hues.size();
Y /= Hues.size();
//Get atan2 of those
double AverageColor = atan2(X, Y) * 180/PI;
std::cout << "Average: " << AverageColor << "\n";
return 0;
}
Statt die erwartete Antwort von 3 (da in diesem Schema auf -5 entsprechen 355 sollte), erhalte ich 86,9951.
Kann jemand darauf hinweisen, was ich falsch mache? Das scheint sehr einfach zu sein.
Oh Götter, das ist peinlich. Ich hätte das sehen sollen. Vielen Dank! – GarrickW
Eine Möglichkeit, sich an diese Tatsache zu erinnern, besteht darin, sich daran zu erinnern, dass das, was Sie zu tun versuchen, 'atan (Y/X)' ist, außer dass es immer noch als 'X -> 0 'funktionieren soll. Diese Art von Aussehen sieht wie folgt aus: atan2 (Y, X). –
Um das Leben des Programmierers zu vereinfachen, beachten Sie, dass einige Sprachen in umgekehrter Reihenfolge sind - zum Beispiel in Excel atan2 (x; y) –