gpt4 book ai didi

c++ - 在两个特定值之间生成颜色

转载 作者:行者123 更新时间:2023-11-28 02:13:56 25 4
gpt4 key购买 nike

我有最低速度的 Color 和最高速度的 Color

我有另一个名为 currentSpeed 的变量,它提供了当前速度。我想使用当前速度在两个极端之间生成一个 Color。有什么提示吗?

最佳答案

最简单的解决方案可能是对每个 RGB 进行线性插值(因为这可能是您的颜色所采用的格式)。但是,它可能会导致一些奇怪的结果。如果 lowest 是亮蓝色 (0x0000FF) 而 highest 是亮黄色 (0xFFFF00),则中间将为深灰色 (0x808080)。

更好的解决方案可能是:

  • 将两种颜色都转换为 HSL(色调、饱和度、亮度)
  • 对这些分量进行线性插值
  • 将结果转换回 RGB。

参见 this answer了解如何与 HSL 进行相互转换。

要进行线性插值,您需要类似的东西:

double low_speed = 20.0, high_speed = 40.0;  // The end points.
int low_sat = 50, high_sat = 200; // The value at the end points.
double current_speed = 35;

const auto scale_factor = (high_sat-low_sat)/(high_speed-low_speed);
int result_sat = low_sat + scale_factor * (current_speed - low_speed);

两个问题:

  • 如果速度实际上不是 double,则需要注意整数舍入。
  • 当你开始插值色调时,你需要知道它们表示为圆上的角度 - 所以你可以选择是顺时针插值还是逆时针插值(其中之一将通过 360 度回到 0) .

关于c++ - 在两个特定值之间生成颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34673722/

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