根据波长转换为颜色

该博客介绍了一个将特定波长转换为RGB颜色的函数,涵盖了380到780纳米的可见光谱范围。通过一系列条件判断,函数将波长映射到红、绿、蓝三种颜色,并根据接近视觉感知极限时的强度调整颜色输出。此外,还涉及了在接近光谱极限时对颜色强度的调整,确保了颜色在人眼中的准确感知。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//wavelength: 380 - 780
let wavelengthToRGB = function(wavelength) {
    let R = 0
    let G = 0
    let B = 0

    // core translation into color
    if (wavelength >= 380 && wavelength <= 440) {
        R = -1*(wavelength-440)/(440-380)
        G = 0
        B = 1
    } else 
    if (wavelength > 440 && wavelength <= 490) {
        R = 0
        G = (wavelength-440)/(490-440)
        B = 1
    } else 
    if (wavelength > 490 && wavelength <= 510) {
        R = 0
        G = 1
        B = -1*(wavelength-510)/(510-490)
    } else 
    if (wavelength > 510 && wavelength <= 580) {
        R = (wavelength-510)/(580-510)
        G = 1
        B = 0
    } else 
    if (wavelength > 580 && wavelength <= 645) {
        R = 1
        G = -1*(wavelength-645)/(645-580)
        B = 0
    } else 
    if (wavelength > 645 && wavelength <= 780) {
        R = 1
        G = 0
        B = 0
    }


    // intensity adjustment near the vision limits
    let intensity = 1
    if (wavelength >= 700) {
        intensity = 0.3 + 0.7*(780-wavelength)/(780-700)
    } else
    if (wavelength < 420) {
        intensity = 0.3 + 0.7*(wavelength-380)/(420-380)
    }
    console.log("intensity:", intensity)


    return [
        Math.round(R*intensity*255),
        Math.round(G*intensity*255),
        Math.round(B*intensity*255)
    ]
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值