问题描述
我有一个范围从 -10 到 10 并且不断变化的变量。我想要一个返回 RGBA 值的 python 函数:
红色:接近-10时,
绿色:接近 10 时
我自己想不出办法做到这一点,而且我想过去有人做过类似的事情。
解决方法
您可以使用 HSV 等颜色表示来执行此操作。您可以将 rgb 颜色最大值 (255,0) 和最小值 (0,255,0) 转换为 HSV (0,100%,100%) (120,100%)。查看这些,您可以看到只有一个值发生了变化,即色调。因此,您可以将范围 -10:10 映射到色调 0:120 的范围。这可以使用一个非常简单的映射函数来完成:
def map_values(oldValue):
# this is your range -10:10
OldRange = (10 - -10)
# range we are mapping to 0:120
NewRange = (120 - 0)
return (((oldValue - -10) * NewRange) / OldRange) + 0
既然您有了色调,就可以将其转换为 RGB 值。 colorsys
import colorsys
# we need to divide by 360 because this function
# expects a value from 0.0 to 1.0. H has a range from 0 to 360
my_rgb_color = colorsys.hsv_to_rgb(map_values(your_value) / 360.0,1.0,1.0)
,
您可以使用此功能代替导入模块:
def rg(num):
num = 255 * num // 10
if num > 0:
return 255 - num,0
return 255,255 + num,0
print(rg(-10),rg(0),rg(10))
输出:
(255,0) (255,0) (0,0)