TikZ 如何积累透明度?

TikZ 如何积累透明度?

我想画一个图形,其中“色彩”与某个值相对应。(例如,一张地图,一个地区居住的人越多,这个地区就越“红”。)

现在我偶然发现了 TikZ 处理透明度的方式。作为一名 MWE:

\documentclass{article}

\usepackage{tikz}

\begin{document}
 \begin{tikzpicture}
    \fill[red, fill opacity=1.000] (0,0) circle (1);
  \foreach \i in {1, 2, ..., 100}
    \fill[red, fill opacity=0.010] (2,0) circle (1);
  \foreach \i in {1, 2, ..., 1000}
    \fill[red, fill opacity=0.001] (4,0) circle (1);
 \end{tikzpicture}
\end{document}

(我只是循环重叠以最小化示例。实际上,我得到了多个部分重叠的区域。)

我期望得到三个圆圈全部相同(填充红色)。相反,我得到的是一个红色圆圈、一个红色圆圈,甚至根本没有圆圈。

红色的情况很麻烦,但没有圆圈让我怀疑透明度是否有最小值,以及如何绕过这个限制。如果最小值为 0.01,我如何重叠 101 个圆圈并让它们看起来与 100 个不同。(考虑到任何人都可以在如此精细的尺度上分辨出差异。)

答案1

以下内容可能有误。但这是我最好的猜测。

通常,手机相机生成的典型照片由三个颜色通道组成:红色、绿色和蓝色。每个通道有 8 位。也就是说,像素的红色介于 0(完全没有红色)和 255(最红)之间。绿色和蓝色也是如此。

由于我们从实验中得知,人眼无法区分 100 种红色和 100.5 种红色,因此我们确信只需要 256 种红色。

现在看看不透明度。由于只有 256 个红色,我们不需要超过 256 个不透明度。我们可能还会猜测,在计算过程中,0.49 不透明度将被记录为 0 不透明度,而 0.51 不透明度将被记录为 1 不透明度。以下代码支持这一猜测。

\documentclass{article}
\usepackage{tikz}
\begin{document}
 \begin{tikzpicture}
  \foreach\i in{1,2,...,1000}\filldraw[fill opacity=1/508](0,0)circle (1);
  \foreach\i in{1,2,...,1000}\filldraw[fill opacity=1/509](2,0)circle (1);
 \end{tikzpicture}
\end{document}

回到你的问题:

  • 理论上它们看起来不一样。重叠 10000 个不透明度为 0.0001 的圆圈更有可能产生 1-(1-0.0001) 10000的不透明度。此公式的极限是 1-1/, 在哪里是欧拉数。
  • 是的,透明度有一个最低值。
  • 差异非常小,几乎超出了我们眼睛的极限。即使读者真的能注意到,他们也不会注意到细节。
  • 此外,您的屏幕、投影仪或打印机无法完成这项工作,因为大多数设备仅支持 8 位通道。

相关内容