我需要一个基于变量 return RGBA 值的函数
I need a function to return RGBA values based on a variable
我有一个从 -10 到 10 的变量,并且不断变化。我想要一个 python 函数返回 RGBA 值:
红色:接近-10时,
绿色:接近 10
时
我自己想不出办法做到这一点,我想过去有人做过类似的事情。
您可以使用像 HSV 这样的颜色表示来做到这一点。您可以将 rgb 颜色最大值 (255, 0, 0) 和最小值 (0, 255, 0) 转换为 HSV (0, 100%, 100%) (120, 100%, 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, 255, 0
return 255, 255 + num, 0
print(rg(-10), rg(0), rg(10))
输出:
(255, 0, 0) (255, 255, 0) (0, 255, 0)
我有一个从 -10 到 10 的变量,并且不断变化。我想要一个 python 函数返回 RGBA 值:
红色:接近-10时,
绿色:接近 10
我自己想不出办法做到这一点,我想过去有人做过类似的事情。
您可以使用像 HSV 这样的颜色表示来做到这一点。您可以将 rgb 颜色最大值 (255, 0, 0) 和最小值 (0, 255, 0) 转换为 HSV (0, 100%, 100%) (120, 100%, 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, 255, 0
return 255, 255 + num, 0
print(rg(-10), rg(0), rg(10))
输出:
(255, 0, 0) (255, 255, 0) (0, 255, 0)