我想画一个图形,其中“色彩”与某个值相对应。(例如,一张地图,一个地区居住的人越多,这个地区就越“红”。)
现在我偶然发现了 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 位通道。