gpt4 book ai didi

r - 如何使用 HSL(Hue Saturation Lightness)圆柱颜色模型

转载 作者:行者123 更新时间:2023-12-02 06:12:15 26 4
gpt4 key购买 nike

我想用HSL (Hue Saturation Lightness)颜色模型(圆柱形)。也许我错过了它,但我找不到根据该方案返回颜色的函数。 hcl来自 colorspace包使用色度而不是饱和度。我想使用一个模型,其中最大亮度/亮度将始终返回白色,如下图所示。 如何使用 R 中的 HSL 模型指定颜色?

TIA

加在

我使用 hcl 得到的不同亮度级别的结果这是( code here )吗?
enter image description here

我想要的是这个 HSL 模型。

enter image description here

最佳答案

改编自维基百科和 java 代码,(老实说)没有超过 90 秒(我计时):

# specify h as whole input degrees (e.g 0-360)
# s = 0.0 - 1 (0 - 100%)
# l = 0.0 - 1, (0 - 100%)
# returns output from R's rgb() functin

hsl_to_rgb <- function(h, s, l) {
h <- h / 360
r <- g <- b <- 0.0
if (s == 0) {
r <- g <- b <- l
} else {
hue_to_rgb <- function(p, q, t) {
if (t < 0) { t <- t + 1.0 }
if (t > 1) { t <- t - 1.0 }
if (t < 1/6) { return(p + (q - p) * 6.0 * t) }
if (t < 1/2) { return(q) }
if (t < 2/3) { return(p + ((q - p) * ((2/3) - t) * 6)) }
return(p)
}
q <- ifelse(l < 0.5, l * (1.0 + s), l + s - (l*s))
p <- 2.0 * l - q
r <- hue_to_rgb(p, q, h + 1/3)
g <- hue_to_rgb(p, q, h)
b <- hue_to_rgb(p, q, h - 1/3)
}
return(rgb(r,g,b))
}

# r, g, b = 0.0 - 1 (0 - 100%)
# returns h/s/l in a vector, h = 0-360 deg, s = 0.0 - 1 (0-100%), l = 0.0 - 1 (0-100%)
rgb_to_hsl <- function(r, g, b) {
val_max <- max(c(r, g, b))
val_min <- min(c(r, g, b))
h <- s <- l <- (val_max + val_min) / 2
if (val_max == val_min){
h <- s <- 0
} else {
d <- val_max - val_min
s <- ifelse(l > 0.5, d / (2 - val_max - val_min), d / (val_max + val_min))
if (val_max == r) { h <- (g - b) / d + (ifelse(g < b, 6, 0)) }
if (val_max == g) { h <- (b - r) / d/ + 2 }
if (val_max == b) { h <- (r - g) / d + 4 }
h <- (h / 6) * 360
}
return(c(h=h, s=s, l=l))
}

关于r - 如何使用 HSL(Hue Saturation Lightness)圆柱颜色模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28562288/

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