तो मैं बाहर पहेली कैसे वस्तुओं जिसका रंग एचएसएल मूल्यों का प्रतिनिधित्व कर रहे के एक नंबर की औसत रंग की गणना करने की कोशिश कर रहा था। शुक्र है, मैंने this Stack Overflow post भर में ठोकर खाई, और शीर्ष उत्तर में प्रदान किए गए एल्गोरिदम को कार्यान्वित करने के लिए सेट करने के लिए सेट किया (मैं सी ++ में काम कर रहा हूं)।के औसत परिपत्र मूल्यों (विशेष रूप से एचएसएल रंग योजना में ह्यूज़)
दुर्भाग्य से, मेरा कार्यान्वयन काम नहीं कर रहा है। यहां यह पूरी तरह से है; ध्यान दें कि हालांकि मैं "ह्यू" लिखता हूं, प्रारंभिक कार्यान्वयन के अनुसार, डिग्री में, कोणों का उपयोग कर रहा हूं (0-360 कोण से 0-256 रंगों में स्विचिंग, एक बार जब मैं अपना कोड काम करता हूं, तो मुश्किल नहीं होना चाहिए)।
#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;
}
के बजाय 3 (355 के बाद से इस योजना में -5 के बराबर होना चाहिए) की उम्मीद जवाब, मैं 86.9951 मिलता है।
क्या कोई यह बता सकता है कि मैं क्या गलत कर रहा हूं? यह बहुत बुनियादी लगता है।
ओह देवता, यह शर्मनाक है। मुझे यह देखना चाहिए था। धन्यवाद! – GarrickW
इस तथ्य के बारे में खुद को याद दिलाने का एक तरीका यह याद रखना है कि आप जो करने की कोशिश कर रहे हैं वह 'एतान (वाई/एक्स)' प्राप्त करना है, सिवाय इसके कि हम चाहते हैं कि यह अभी भी 'एक्स -> 0' के रूप में काम करे। इस तरह के दिखने जैसे 'atan2 (वाई, एक्स)'। –
प्रोग्रामर के जीवन को सरल बनाने के लिए, ध्यान दें कि कुछ भाषाएं विपरीत क्रम में हैं - उदाहरण के लिए Excel atan2 (x; y) –