编辑:

编辑:

使用 TikZ,该shade选项非常方便生成颜色阴影,但它只产生线性颜色渐变。是否可以获得其他过渡,尤其是对数过渡?

谢谢!

编辑:

以下是线性情况的一个例子:

\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\begin{document}


\begin{tikzpicture}
\shade[left color=black, right color=white] (0,0) rectangle (10,1);
\end{tikzpicture}

\end{document}

线性阴影

答案1

这里有些例子。

  • R=G=B=x(你的 MWE)
  • R=G=B=x
  • R=G=B=x²
  • R=G=B=√x
  • R=G=B=log(1+x)
  • R=G=B=log(1+9x)
  • 红=绿=蓝=...出色地 ...

\documentclass{article}
\usepackage[a3paper]{geometry}
\usepackage{tikz}
\begin{document}

\begin{tikzpicture}
    \fill(-11,0)|-(0,-2)|-(11,2)|-cycle;
    \shade[left color=black,right color=white](-10,-1)rectangle(10,1);
\end{tikzpicture}

\pgfdeclarefunctionalshading{LBRW}{\pgfpoint{0bp}{0bp}}{\pgfpoint{100bp}{100bp}}{}{
    pop 50 div .5 sub % u
    dup dup % u u u
}
\begin{tikzpicture}
    \fill(-11,0)|-(0,-2)|-(11,2)|-cycle;
    \shade[shading=LBRW](-10,-1)rectangle(10,1);
\end{tikzpicture}

\pgfdeclarefunctionalshading{dup mul LBRW}{\pgfpoint{0bp}{0bp}}{\pgfpoint{100bp}{100bp}}{}{
    pop 50 div .5 sub % u
    dup mul % u²
    dup dup % u² u² u²
}
\begin{tikzpicture}
    \fill(-11,0)|-(0,-2)|-(11,2)|-cycle;
    \shade[shading=dup mul LBRW](-10,-1)rectangle(10,1);
\end{tikzpicture}

\pgfdeclarefunctionalshading{sqrt LBRW}{\pgfpoint{0bp}{0bp}}{\pgfpoint{100bp}{100bp}}{}{
    pop 50 div .5 sub % u
    sqrt % √u
    dup dup % √u √u √u
}
\begin{tikzpicture}
    \fill(-11,0)|-(0,-2)|-(11,2)|-cycle;
    \shade[shading=sqrt LBRW](-10,-1)rectangle(10,1);
\end{tikzpicture}

\pgfdeclarefunctionalshading{1 add log LBRW}{\pgfpoint{0bp}{0bp}}{\pgfpoint{100bp}{100bp}}{}{
    pop 50 div .5 sub % u
    1 add log % ㏒(1+u)
    dup dup % ㏒(1+u) ㏒(1+u) ㏒(1+u)
}
\begin{tikzpicture}
    \fill(-11,0)|-(0,-2)|-(11,2)|-cycle;
    \shade[shading=1 add log LBRW](-10,-1)rectangle(10,1);
\end{tikzpicture}

\pgfdeclarefunctionalshading{9 mul 1 add log LBRW}{\pgfpoint{0bp}{0bp}}{\pgfpoint{100bp}{100bp}}{}{
    pop 50 div .5 sub % u
    9 mul 1 add log % ㏒(1+9u)
    dup dup % ㏒(1+9u) ㏒(1+9u) ㏒(1+9u)
}
\begin{tikzpicture}
    \fill(-11,0)|-(0,-2)|-(11,2)|-cycle;
    \shade[shading=9 mul 1 add log LBRW](-10,-1)rectangle(10,1);
\end{tikzpicture}

\pgfdeclarefunctionalshading{logistic}{\pgfpoint{0bp}{0bp}}{\pgfpoint{100bp}{100bp}}{}{
    50 div .5 sub exch % v U
    50 div .5 sub 4 mul exch % 4u v
    dup 1 exch sub % 4u v 1-v
    2 index % 4u v (1-v) 4u
    mul mul % u 4uv(1-v)
    dup 1 exch sub 2 index mul mul
    dup 1 exch sub 2 index mul mul
    dup 1 exch sub 2 index mul mul
    dup 1 exch sub 2 index mul mul
    dup 1 exch sub 2 index mul mul
    exch pop dup dup
}
\begin{tikzpicture}
    \fill(-11,0)|-(0,-2)|-(11,2)|-cycle;
    \shade[shading=logistic](-10,-1)rectangle(10,1);
\end{tikzpicture}

\end{document}

评论

  • dup复制最顶部的元素。
  • 每一个末端dup dup其实都是不必要的。
  • 如果在堆栈中只留下一个数字,PDF 渲染器将把它视为灰度。
  • 如果有三个,则分别是R,G,B。
  • 如果有 0 或 2 或 4、5、6...... 我就不知道了。
  • pop丢弃最顶层元素。
  • 每次pop一开始都会丢弃 y 坐标,除了最后一种情况外,它是无用的。
  • pop用替换swap,您可以保留底部的 y 坐标。但随后dup dup就变得必要了。
  • 有关详细信息,请参阅 TiZ 手册IX.110.2.3 一般(功能)阴影
  • 欲了解更多信息,请参阅 PDF 手册8.7.4.5.2 类型 1(基于功能)阴影
  • 也可以看看附件 B(规范性)第 4 类函数中的运算符

相关内容