gpt4 book ai didi

c++ - 平均循环值(特别是 HSL 配色方案中的色调)

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:21:58 24 4
gpt4 key购买 nike

所以我想弄清楚如何计算许多物体的平均色调,这些物体的颜色由 HSL 值表示。谢天谢地,我偶然发现了this Stack Overflow post ,并着手实现最佳答案中提供的算法(我正在使用 C++)。

不幸的是,我的实现似乎不起作用。在这里,完整的;请注意,虽然我写的是“Hue”,但我使用的是角度,以度为单位,根据初始实现(从 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;
}

我得到了 86.9951,而不是预期的答案 3(因为 355 应该等同于此方案中的 -5)。

有人可以指出我做错了什么吗?这看起来很基础。

最佳答案

atan2 以相反的顺序接受它的参数。我知道,烦人!所以尝试:

double AverageColor = atan2(Y, X) * 180 / PI;

现在给出的答案是 3.00488。

关于c++ - 平均循环值(特别是 HSL 配色方案中的色调),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13959276/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com