我一直在阅读几个 wiki 页面并检查不同的计算,并创建 RGB 立方体投影到六边形上的可视化。我想发表我对这种转换的理解。由于我发现这种转换(使用几何形状表示颜色模型)很有趣,因此我将尽力做到彻底。首先,我们从 RGB 开始。
RGB
嗯,这确实不需要太多解释。最简单的形式是,有 3 个值:R、G 和 B,范围为 [0,255]。例如,51,153,204
。我们可以用条形图来表示:
RGB Cube
我们还可以在 3D 空间中表示颜色。我们有三个价值观R
, G
, B
对应于X
, Y
, and Z
。所有三个值都在[0,255]
范围,这会产生一个立方体。但在创建 RGB 立方体之前,我们先处理 2D 空间。 R、G、B 的两种组合给出:RG、RB、GB。如果我们将它们绘制在平面上,我们会得到以下结果:
这是 RGB 立方体的前三个面。如果我们将它们放置在 3D 空间上,则会产生一个半立方体:
如果你检查上图,通过混合两种颜色,我们会在 (255,255) 处得到一种新颜色,它们是黄色、洋红色和青色。同样,这些的两个组合给我们:YM、YC 和 MC。这些是立方体的缺失面。一旦我们添加它们,我们就得到了一个完整的立方体:
以及位置51,153,204
在这个立方体中:
RGB 立方体在六边形上的投影
现在我们有了 RGB 立方体,让我们将其投影到六边形上。首先,我们将立方体倾斜 45°x
,然后 35.264°y
。第二次倾斜后,黑角在底部,白角在顶部,它们都穿过z
axis.
正如您所看到的,当我们从顶部观察立方体时,我们得到了我们想要的具有正确色调顺序的六边形外观。但我们需要将其投影到真正的六边形上。我们要做的就是画一个与立方体顶视图大小相同的六边形。六边形的所有角都对应于立方体的角和颜色,立方体的顶角(白色)投影到六边形的中心。黑色被省略。如果我们将每种颜色映射到六边形上,我们就会得到正确的外观。
以及位置51,153,204
在六边形上将是:
计算色调
在进行计算之前,我们先定义一下什么是色调。
色调大致是矢量与投影中一点的角度,红色为 0°。
...色调是该点在六边形边缘周围的距离。
这是从以下计算得出的HSL 和 HSV https://en.wikipedia.org/wiki/HSL_and_HSV#Hue_and_chroma维基页面。我们将在本说明中使用它。
检查六边形及其位置51,153,204
on it.
首先,我们缩放 R、G、B 值以填充 [0,1] 区间。
R = R / 255 R = 51 / 255 = 0.2
G = G / 255 G = 153 / 255 = 0.6
B = B / 255 B = 204 / 255 = 0.8
接下来,找到max
and min
的值R, G, B
M = max(R, G, B) M = max(0.2, 0.6, 0.8) = 0.8
m = min(R, G, B) m = min(0.2, 0.6, 0.8) = 0.2
然后,计算C
(色度)。色度定义为:
... 色度大致是点到原点的距离。