【问题标题】:JS: How is this mathematic operation called?JS:这个数学运算怎么叫?
【发布时间】:2017-03-18 18:00:59
【问题描述】:

我只是在颜色转换器中偶然发现了这条线,但不知道它有什么作用,也不知道它的名字。你知道吗?

// `hsvToRgb`
// Converts an HSV color value to RGB.
// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]
// *Returns:* { r, g, b } in the set [0, 255]
 function hsvToRgb(h, s, v) {

    h = bound01(h, 360) * 6;
    s = bound01(s, 100);
    v = bound01(v, 100);

    var i = Math.floor(h),
        f = h - i,
        p = v * (1 - s),
        q = v * (1 - f * s),
        t = v * (1 - (1 - f) * s),
        mod = i % 6,
        r = [v, q, p, p, t, v][mod],    // <-- It's this line
        g = [t, v, v, q, p, p][mod],
        b = [p, p, t, v, v, q][mod];

    return { r: r * 255, g: g * 255, b: b * 255 };
}

原文件:TinyColor.js

【问题讨论】:

  • 色相、饱和度、亮度到红绿蓝。
  • 颜色转换。更多在这里:en.wikipedia.org/wiki/HSL_and_HSV#Converting_to_RGB,它是部分 (R1, G1, B1) = ...
  • 简单数组和括号表示法来读取索引mod处的数组值。没有什么不寻常的。
  • 哦,我明白了,这是一个动态创建的数组,然后选择了第 n 个元素(基于 mod)。在我眼前有太多的数学:D
  • @SörenKlein 稍微扩展一下:它被称为数组字面量,通过括号表示法立即访问。

标签: javascript math colors


【解决方案1】:

HSV(色相、饱和度、值)可以可视化为“六角锥”、六角锥(参见http://www.efg2.com/Lab/Graphics/Colors/HSVhexcone.gif)。要将色调转换为 RGB 风格的颜色,代码首先确定它属于六边形的 6 个“切片”中的哪一个 (mod = i % 6)。所以mod 是一个切片编号,从 0 到 5 的整数。您指示的行(以及接下来的两个)根据色调所在的切片从这些数组中查找 RGB 值。所以如果色调值让我们进入切片编号为 1,则 RGB 将设置为 (q, v, p)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 2010-09-16
    • 2018-12-19
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 2020-06-21
    相关资源
    最近更新 更多